2つのファイルを比較し、最初のファイルの共通フィールドと対応する行番号を印刷します。

2つのファイルを比較し、最初のファイルの共通フィールドと対応する行番号を印刷します。

ファイルには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には、1行に1つずつ名前のリストがあります。

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

両方のファイルを並べて出力します。また、出力を解析するための他のオプションもあります。確認するマニュアルページより多くの選択のために。

関連情報