我有两个文件:
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。
答案 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
打印计数。