awkを使用して他のファイルの数を使用してファイルから行を正しく抽出するにはどうすればよいですか?

awkを使用して他のファイルの数を使用してファイルから行を正しく抽出するにはどうすればよいですか?

私はbashシェルを使用しています。行番号を持つファイルがある場合

1
4
7
9

最初の要素が数字で、その後にテキスト文字列が続く別の行ファイル

1,Michael Jordan
2,Karl Malone,
3,Charles Barkley
4,Greg Anthony
5,Chris Mullen
6,Reggie Miller
7,Billy Owens
8,David Robinson
9,Shaquille O'Neal
10,John Stockton

awk最初の数字が最初のファイルに属している場合にのみ、2番目のファイルから行を抽出するコマンドをどのように書くことができますか?上記の例では、次のような結果が出ることが予想されます。

1,Michael Jordan
4,Greg Anthony
7,Billy Owens
9,Shaquille O'Neal

私はこれを試しました

awk 'FNR==NR{a[$1];next} $1 in a' /tmp/first_file /tmp/second_file > /tmp/third_file

しかし、3番目のファイルでは何も生成されません。

ベストアンサー1

,2番目のファイルはカンマで区切られているため、コマンドラインオプションを使用してawkフィールド区切り文字を-に設定する必要があります。-F

awk -F, 'FNR==NR{a[$1];next} $1 in a' /tmp/first_file /tmp/second_file > /tmp/third_file

またはFS組み込み変数を介して:

awk 'FNR==NR{a[$1];next} $1 in a' /tmp/first_file FS=, /tmp/second_file > /tmp/third_file

後者のアプローチを使用すると、最初のファイルがコンマで区切られず、複数のフィールドがある場合を処理できます。

おすすめ記事