awkを使用してあるファイルの列を別のファイルの最後の列に追加するには?

awkを使用してあるファイルの列を別のファイルの最後の列に追加するには?

file2不明な数の列を含む2番目の列をに追加して、file1この列が最後の列になるようにしますfile1。このために、aと2番目の列だけをfile3貼り付けて組み合わせを作ってみました。file1file2

file1:

col11  col12  col13  ...  col1n

file2:

col21  col22  col23  ...  col2m

新しいfile1またはfile3:

col11 col12  ...  col1n  col22

私は次のコマンドを使用しています:

awk '{ print $0 > "file3"; getline<"file2"; print $2 > "file3" }' file1 &

ただし、col22 の引数は、新しいファイルの最後の列を形成する代わりにラップされます。

エラーを見つけて修正したり、より効率的なソリューションを見つけるのに役立つ人はいますか?
私のオペレーティングシステムはfedora12です。

答え1

awk '{f1 = $0; getline<"file2"; print f1, $2}' < file1 > file3

出力ファイルには同じ数の行があるため、file1最後の行の最後の列が短い場合は空になり、長い場合はfile2最後の値は無視されます。file2

またはCostasが提案したように:

awk '{getline f1 <"file1" ; print f1,$2}' < file2 > file3

ただし、それまではfile3行数が等しくなりますfile2。つまりfile2、これより長いと、列の順序が影響を受けますfile1

そして:

awk '{print $2}' < file2 | paste file1 - > file3

file3file1合計で最大の行数と同じ数の行がありますfile2。データは削除されませんが、上記のように最後の行が 。file2より長い場合は、file1最初/2番目の列のデータが含まれますfile3file2

答え2

努力する

$ awk 'NR==FNR{a[NR]=$2;next}{print $0,a[FNR]}' file2 file1
col11 col12 col13 ... col1n col22

この{a[NR]=$2;next}部分はリストの最初のファイル()に対してのみ実行され、2番目のファイル()を処理するfile2ときに行全体を印刷し、2番目のフィールド値を含むテーブル要素を追加します。awkfile1file1a[FNR]file2

関連情報