2015-10-07 115 views
3

的重複出現次數的計數我有兩個文件:比較兩個文件,並顯示一個字符串

main1.txt

111 
222 
333 

infoFile.txt

111 
111 
333 
444 

我需要比較這兩個文件並顯示文件main1.txt中每行的重複次數爲infoFile.txt,作爲一個例子:

111: Total 2 
222: Total 0 
333: Total 1 

我用grep -f main1.txt infoFile.txt | sort |uniq -c但它會刪除所有不在foFile.txt提供,而我需要它來顯示這些計數爲0

回答

1

弦用awk可以這樣做:

awk 'FNR==NR{a[$1]++; next} {print $1 ": Total", ($1 in a)?a[$1]:0}' infoFile.txt main1.txt 
111: Total 2 
222: Total 0 
333: Total 1 

工作原理:

  • FNR==NR - 執行此塊爲第一個文件只
  • {a[$1]++; next} - 與主要作爲$1和值作爲和遞增計數創建關聯數組a,然後跳到下一個記錄
  • {...} - 執行該塊爲第二輸入文件
  • for (i in a)迭代陣列a
  • {print $1 ": Total", ($1 in a)?a[$1]:0} - 先打印第一個字段後跟文本": Total "然後打印0如果第二個文件的第一個字段不存在於數組a中。否則,打印數組a
+0

不錯的解決方案!你能解釋一下這個表達嗎? – Oni1

+2

ok在答案中添加了詳細的解釋。 – anubhava

+1

這是完美的,謝謝你.. –