両方のファイルの最初の列を取得し、3番目のファイルに書き込みます。

両方のファイルの最初の列を取得し、3番目のファイルに書き込みます。

2つのファイルがあり、たとえばABC.txtPQR.txtのようなデータがあるとします。

ABC.txt:

ABC DEF

PQR.txt:

PQR XYZ

grep2つのファイルのうち、列1を3番目のテキストファイルに書きたいです。どうすればいいですか?

私の期待される出力は(output.txt)です。

ABC PQR

ベストアンサー1

これを行う方法はいくつかあります。

  • 使用pastecut:

    $ paste -d ' ' <(cut -d' ' -f 1 ABC.txt ) <(cut -d' ' -f 1 PQR.txt ) > output.txt
    ABC PQR
    

    システムがプロセス置換をサポートしていない場合は、次のコマンドを使用します。

    $ cut -d' ' -f 1 ABC.txt > /tmp/aa; cut -d' ' -f 1 PQR.txt > /tmp/bb; paste -d ' ' /tmp/aa /tmp/bb
    
  • 使用してくださいawk(@Costasのおかげで):

    awk 'FNR==NR{a[FNR]=$1; next}{print a[FNR],$1}' ABC.txt PQR.txt > output.txt
    

    特殊変数は、FNR現在の入力ファイルの行番号とNRファイルのソースに関係なく、通常入力の行番号です。これらは、最初の入力ファイルを読み取る場合にのみ同じです。したがって、最初のファイルの最初のフィールドは配列aa[FNR]=$1)に格納されます。配列のキーは行番号で、値は最初のフィールドです。次に、2番目のファイルに到達すると、その行番号a[NR]()と現在の行の最初のフィールドに対応する値が印刷されます。

おすすめ記事