比较两个文件并显示字符串重复出现的次数

时间:2015-10-07 09:41:12

标签: bash shell count

我有两个文件:

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 个答案:

答案 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} - 创建一个关联数组a,其键为$1,值为和递增计数,然后跳到下一条记录
  • {...} - 为第二个输入文件执行此块
  • for (i in a)迭代数组a
  • {print $1 ": Total", ($1 in a)?a[$1]:0} - 如果数组": Total "中不存在第二个文件中的第一个字段,则打印第一个字段,然后打印文本a,然后打印0。否则,从数组a打印计数。