2017-02-09 65 views
-1
operator1,4578 
operator2,1234 
operator3,9875 
operator4,6357 
operator1,6353 
operator4,9765 
operator1,6347 
operator1,6798 
operator3,6793 
operator3,1465 
operator4,6796 
operator4,3333 

我需要使用awkpython找出最小和各運營商的最大值(在awk需要命令以及在Python太)和輸出將是如下:我需要找到最大和最小值橫行

Name  Min  Max 
operator1 4578  6798  
operator2 1234  
operator3 1465  9875  
operator4 3333 9765  

誰能幫我請

+0

查找在python類型的字典和關聯數組在awk中缺少輸出operator2如 –

+0

最大值。它應該是1234. –

+0

嗨,何塞,我做了awk -F「,」'BEGIN {max = -1; min = -1} $ 1 ==「operator1」{max} = max <$ 2? $ 2:max; min =(min == -1 || min> $ 2)? $ 2:min } END {printf「operation2%d%d」,max,min} 'filename –

回答

0

你可以試試這個:

awk -F, ' 
    min[$1]>$2||!min[$1]{ 
     min[$1]=$2 
    } 
    max[$1]<$2{ 
     max[$1]=$2 
    } 
    END{ 
    for(i in max){ 
     print i,min[i],(max[i]!=min[i]?max[i]:"") 
    } 
    }' file 

的2陣列minmax這是在解析輸入文件填充值使用該腳本化妝。

解析完成後,將打印這兩個數組。

請注意,max[i]!=min[i]?max[i]:""正在跳過最大值,以防與最小值相同。

我讓你把標題行,並與column命令的情況下,你想縮進玩...

+0

非常感謝...它的工作:) –

0

@amit庫馬爾:嘗試:

awk -F, 'FNR==NR{A[$1]=A[$1]>$NF?A[$1]:$NF;B[$1]=B[$1]>$NF?$NF:(B[$1]?B[$1]:$NF);next} FNR==1 && FNR!=NR{print "Name Min Max"}($1 in A){print $1 "\t" B[$1] "\t" A[$1];delete B[$1];delete A[$1]}' Input_file Input_file 

這裏我將字段分隔符作爲「,」然後FNR == NR條件將確保它只有在第一次讀取Input_file時纔會執行。 FNR和NR都是awk的內置關鍵字,並在其中定義行號。每當讀取新的Input_file時,FNR的值將被重置,其中N的值將持續增加,直到所有文件被成功讀取。然後在那個塊中,我創建了一個名爲A的數組,其索引是$ 1,我正在檢查前一個A [$ 1]的值是否大於當前相同的數組索引,然後更改A [$ 1]的值到目前的$ NF保持它原樣(這基本上是爲每行$ 1的最大值),同樣的事情我正在做的Input_file中的$ 1的MINIMUM值和存儲值到數組B.下一步將跳過所有下一個即將發表的聲明,所以只有FNR == NR條件將被執行。 Now FNR == 1 & &當讀取第二個文件的第一行時,FNR!= NR條件將僅爲TRUE,因爲在寫入實際輸出之前,我需要編寫標題列。 (A中$ 1)現在檢查數組A中是否存在當前行$ 1,然後根據OP的請求打印當前$ 1和數組A的值,然後打印數組B的值。

編輯:現在也添加一個非線性形式的解決方案。

awk -F, 'FNR==NR{ 
       A[$1]=A[$1]>$NF?A[$1]:$NF; 
       B[$1]=B[$1]>$NF?$NF:(B[$1]?B[$1]:$NF); 
       next 
       } 
     FNR==1 && FNR!=NR{ 
           print "Name Min Max" 
          } 
     ($1 in A){ 
         print $1 "\t" B[$1] "\t" A[$1]; 
         delete B[$1]; 
         delete A[$1] 
        } 
     ' Input_file Input_file 
+0

嗨Ravinder,感謝您的詳細解釋,但代碼沒有給出任何輸出,而且,它只是一個文件不是兩個文件 –

+0

糾正阿米特,它是1個文件,但我正在讀它兩次,試試看,它應該飛。讓我知道同樣的。此外,爲什麼我讀取Input_file 2次,因爲它會以相同的順序輸出Input_file中的輸出,否則,如果讀取數組,它將不會按順序打印元素。 – RavinderSingh13

相關問題