如何检查来自不同文件的两列之间的公共值的数量

时间:2014-08-08 13:36:07

标签: shell

假设我有两个文件

$A
a b
1 5 
2 6
3 7
4 8

$B
a b
1 5 
2 6
5 6

我的问题是,在Shell或Terminal中,如何计算A的第一列中B的第一列(1,2,5)的值总数(1,2,3) 4)? (答案是2(1,2)。

1 个答案:

答案 0 :(得分:1)

以下awk解决方案计算file1中file2的column1条目:

awk 'FNR==1{next}NR==FNR{a[$1]=$b;next}$1 in a{count++}END{print count}' file1 file2
2
  • 使用FNR==1{next}从两个文件中删除第一行。如果您的实际数据文件中没有标题字段(a b),则可以将其删除。
  • 使用NR==FNR{a[$1]=$b;next}将整个第一个文件读入数组。如果您希望扩展解决方案以匹配两列,我在此处分配column2。如果您对column2不感兴趣,也可以a[$1]++。不管怎样都不会受伤。
  • 如果第二个文件中column1的值在我们的数组中,则递增计数变量
  • END块中打印count变量。