2つのファイルがあります。
ファイル1.txt:
111|aaa|444
222|bbb|555
333|ccc|666
ファイル2.txt:
111
(null)
333
file1 の 2 番目の列を file2 の 1 番目の列に置き換えます。
期待される出力
新しい:
111|111|444
222||555
333|333|666
次のコマンドを使用しています。
awk 'BEGIN {FS=OFS="|"}NR == FNR {a[FNR] = $B;next}$A = a[FNR]' B=1 A=2 file2.txt file1.txt > new.txt
私が得た結果は
新しい:
111|111|444
333|333|666
2回目の記録を失いました。記録損失を防ぐ方法は?
答え1
awk 'BEGIN {FS=OFS="|"}NR == FNR {a[FNR] = $B;next}{$A = a[FNR];print $0}' B=1 A=2 f2 f1
答え2
paste
または、次のためにandを使用できますcut
。
paste -d'|' <(cut -d'|' -f1 file1) <(cat file2) <(cut -d'|' -f3 file2)
しかし、速度の観点からどちらが良いと言うことはできません。