2015-10-07 118 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

这是完美的,谢谢你.. –