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

Compare two files and display the count of duplicates occurences of a string

我有两个文件:

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。

使用 awk 你可以做到:

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

工作原理:

  • FNR==NR - 仅对第一个文件执行此块
  • {a[]++; next} - 创建一个关联数组 a,键为 </code>,值为 <code>,值为递增计数,然后跳到下一条记录
  • {...} - 为第二个输入文件执行此块
  • for (i in a) 迭代数组 a
  • {print ": Total", ( in a)?a[]:0} - 打印第一个字段,后跟文本 ": Total ",如果数组 a 中不存在第二个文件的第一个字段,则打印 0。否则打印数组 a.
  • 中的计数