2017-08-14 55 views
2

拿到小組第一我有一個記錄列表如下如何通過計數在UNIX

Item1,200 
Item1,200 
Item3,900 
Item2,500 
Item2,800 
Item1,600 
Item4, 
Item5, 
Item4,100 
Item5, 
Item5,444 

我的輸出應該

"Please check the file as Item1 is greater than 2" 

隨着我的awk命令的輸出(計數空白) ,但不應該

Item1 3 
Item2 2 
Item3 1 
Item4 2 
Item5 3 

Unix命令應該算沒有空白的項目上面的列表,並應返回一個聲明「PLE如果任何項目的數量大於2(沒有空格),則檢查記錄。

我嘗試過使用下面的awk命令,但無法過濾空白並獲得大於2條記錄的計數。

awk -F, '{a[$1]++;}END{for (i in a)print i, a[i];}' filetest.txt 
+1

對於給定的輸入,您的預期輸出是什麼,明確指出的狀態 – Inian

+0

我已經更新了這個問題! – Bobby

回答

1

試試下面太次,考慮到你需要的輸出以排序的形式。

awk -F, '$2{array[$1]++} END{for(k in array){print k,array[k] | "sort -k1"}}' Input_file 

輸出如下。

Item1 3 
Item2 2 
Item3 1 
Item4 1 
Item5 1 

編輯:作爲OP已經要求提供第一和第二兩個領域的數量,你可以請嘗試以下。

awk -F, '$2{array[$1]++;array2[$1" "$2]++;array3[$2]++} END{for(u in array){for(y in array3){if(array2[u" "y]){print u,array[u],y,array2[u" "y]}}}}' 

OR

awk -F, '$2{ 
    array[$1]++; 
    array2[$1" "$2]++; 
    array3[$2]++ 
    } 
END{ 
    for(u in array){ 
    for(y in array3){ 
     if(array2[u" "y]){ 
     print u,array[u],y,array2[u" "y] 
     } 
    } 
    } 
}' Input_file 

輸出將是如下。

Item1 3 200 2 
Item1 3 600 1 
Item2 2 500 1 
Item2 2 800 1 
Item3 1 900 1 
Item4 1 100 1 
Item5 1 444 1 

EDI2:多加一個解決方案,現在每OP的要求太高。對於每個1美元的價值,這將會包含任何2美元的重複計數。

awk -F, '$2 && !array2[$1,$2]++{array[$1]++} END{for(k in array){print k,array[k] | "sort -k1"}}' Input_file 

輸出如下。

Item1 2 
Item2 2 
Item3 1 
Item4 1 
Item5 1 
+0

好吧!!如果我們按照{a [$ 1,$ 2] ++}這樣的2列進行分組,那麼我的最終輸出是「Item1200」,可以將其作爲單獨的字符串作爲「Item1,200」嗎? – Bobby

+0

改變打印上面打印K「,」陣列[K],讓我知道這是否有助於你。, – RavinderSingh13

+0

不! 「Item1200,2」這是我輸出的。 – Bobby

2

您可以在命令前面使用$ 2來檢查第二個字段是否存在。同樣,在命令列表前面使用$ 3來查看是否存在第三個字段,然後寫入錯誤消息。

awk -F, '$3 {print "Please check the records: $_"}; $2 {a[$1]++;}END{for (i in a)print i, a[i];}' filetest.txt

+0

謝謝!我應該檢查是否任何項目計數是> 2(沒有空白),如果是的話,我應該打印一個聲明,該文件是不正確的其他文件是正確的 – Bobby

+1

你的意思是這樣的?'awk -F,'$ 2 {a [$ 1] ++;} END {for(i in a){print i,a [i]} for(i in a){if(a [i]> 2){打印「請檢查記錄:」,我,a [i]}}'filetest.txt' – rubystallion

+0

是啊謝謝!! ..我有一個類似的問題,但有些增強, 來源: 一個,是 一個,是 二,不 C,N/A C,N/A C,N/A 這裏是,否是可以接受的。如果不同的話具有最高計數再發聲明爲 「請檢查」 – Bobby

0

將一個條件,檢查對空白字段 -

awk -F, '$2 != "" {a[$1]++;} END {for (i in a) { if (a[i] > 2) { print "Check the records for"i } } }' filetest.txt 

結果($ 2 「!」):

Check the records for Item1 
+0

Thanks !! ..我還有一個問題類似於這個,但一些增強,來源:a,是a,是b,沒有c,不適用c,不適用c,不適用這裏是,不是可接受如果不同的單詞有最高的計數,則發送一個語句爲「請檢查」 – Bobby

+0

發表另一個問題,明確說明您的需求。 –