フィールドの一致に基づいて2つのファイルをマージします。

フィールドの一致に基づいて2つのファイルをマージします。

2つの入力ファイルの列を含むファイルを作成したいと思います。ファイル1は次のようになります。

aa 32
bb 15
cc 78

ファイル2は次のようになります。

fa 19
bc 23
cc 50
de 28
aa 45
bb 31

これは、File1を読み込み、File2の最初のフィールドに行の最初のフィールドがある場合は、2つの列でFile2の対応する行を印刷し、最初のフィールドを含むFile1の2番目の列エントリを追加することです。

出力は次のようになります。

aa 45 32
bb 31 15
cc 50 78

このスクリプトはawkを好みます。

ベストアンサー1

$ awk 'FNR==NR{a[$1]=$2;next} ($1 in a) {print $1,a[$1],$2}' file2 file1
aa 45 32
bb 31 15
cc 50 78

説明する:

awk一度に 1 行ずつ各ファイルを暗黙的に繰り返します。最初のパラメータとして持っているので、file2最初に読み込まれます。 file1二度目に読んだ内容でした。

  • FNR==NR{a[$1]=$2;next}

    NRawkこれまでに読み込んだ行数は、FNR現在のファイルからこれまで読み込んだ行数です。awkしたがってFNR==NR、我々はまだ最初の名前付きファイルを読んでいますfile2。の各行にをfile2割り当てますa[$1]=$2

    ここaでは連想配列file2の最初の列をキーとして使用し、a[$1]=$2file2の2番目の列(で示される)を$2配列の値として保存することを意味します。a$1

    nextawk残りのコマンドをスキップし、次の行から始まることを示します。

  • ($1 in a) {print $1,a[$1],$2}

    ここに到達するfile1と、2番目のファイルを読んでいるという意味です。ファイル。file2a

おすすめ記事