比较两个文件并显示字符串的重复出现次数
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
. 中的计数
我有两个文件:
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
. 中的计数