我有两个csv文件
档案A
ID
1
2
3
档案B
ID
1
1
1
1
3
2
3
我想要做的是计算文件A中ID显示在文件B中的次数,并将结果保存在新文件C(采用csv格式)中。例如,文件A中的1在文件B中显示4次。因此在新文件C中,我应该有类似
的内容File C
ID,Count
1,4
2,1
3,2
最初我在考虑使用" grep -f",但它似乎只适用于.txt格式。不幸的是,文件A和B都是csv格式。所以现在,我想也许我可以使用for循环从文件A中单独获取ID并使用grep -c来计算它们中的每一个。任何想法都会有所帮助。
提前致谢!
答案 0 :(得分:1)
您可以使用此awk命令:
awk -v OFS=, 'FNR==1{next} FNR==NR{a[$1]; next} $1 in a{freq[$1]++}
END{print "ID", "Count"; for (i in freq) print i, freq[i]}' fileA fileB
ID,Count
1,4
2,1
3,2
答案 1 :(得分:0)
您可以创造性地使用join
,sort
,uniq
和流程替换 <(command)
:
$ join -2 2 <(sort A) <(sort B | uniq -c) | sort -n > C
$ cat C
ID 1
1 4
2 1
3 2
如果您真的希望标题为ID Count
,那么在写入文件C
之前,您可以将1
替换为Count
并将sed
替换为... | sed 's/\(ID \)1/\1Count/' > C
中加入:
ID Count
1 4
2 1
3 2
获取
tr
如果你真的真的想要逗号作为分隔符而不是空格,用... | tr \ , > C
替换空格,还要添加:
ID,Count
1,4
2,1
3,2
获取
tr
你当然可以放弃sed
并使用... | sed 's/\(ID \)1/\1Count/;s/ /,/' > C
代替这样:
Caller
输出就像上面一样。