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