
file2
不明な数の列を含む2番目の列をに追加して、file1
この列が最後の列になるようにしますfile1
。このために、aと2番目の列だけをfile3
貼り付けて組み合わせを作ってみました。file1
file2
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
file3
file1
合計で最大の行数と同じ数の行がありますfile2
。データは削除されませんが、上記のように最後の行が 。file2
より長い場合は、file1
最初/2番目の列のデータが含まれますfile3
。file2
答え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番目のフィールド値を含むテーブル要素を追加します。awk
file1
file1
a[FNR]
file2