比较两个文件并打印第一个文件中的公共字段及其相应的行号

比较两个文件并打印第一个文件中的公共字段及其相应的行号

我在一个文件中有一些原始数据,例如 File1.txt

Colt McCoy QB CLE  135 222 1576    6   9   60.8%   74.51  
Josh Freeman QB TB 291 474 3451    25  6   61.4%   95.9  
Matt Cassel QB KC  262 450 3116    27  7   58.2%   93.0  
Michael Vick QB PHI    233 372 3018    21  6   62.6%   100.2  
Matt Schaub QB HOU 365 574 4370    24  12  63.6%   92.0  

文件 2.txt 有一个名称列表,每行一个名称

Josh  
Matt  

我想获得名称和行号的输出。对于上面的例子,它将是:

Josh: 2  
Matt: 3,5  

我有一个命令为我提供名称列表和行号,但我想以上面所需的格式打印它。我当前的命令是

awk '{print $1, NR}' file1.txt | grep -f file2.txt

表明

Josh 2
Matt 3
Matt 5

我该怎么做才能使其打印成所需的格式?

答案1

awk单独可以做到这一点:

awk 'NR==FNR{seen[$1]=seen[$1]","NR; next};
{if ($1 in seen){printf("%s: %s\n", $1, substr(seen[$1], 2))}}' file2 file1

答案2

您可以使用diff -y file1 file2

它将为您提供两个文件的并排输出。它还具有其他选项来解析您的输出。查看手册页以获得更多选择。

相关内容