awkを使用して、一致する列に基づいて2つのファイルをマージしたいと思います。
b.txt(タブ区切り)
A
B
C
D
C
C
E
G
a.txt(タブ区切り)
1 2 2 4 19 A
2 2 3 3 12 B
3 2 9 2 5 C
4 3 8 0 9 D
5 5 4 1 1 E
次にスクリプトを実行します。
awk -F"\t" 'BEGIN{OFS="\t"} {if (NR==FNR) {a[$NF]=$0; next} if ($NF in a) {print a[$1]}}' a.txt b.txt > c.txt
私はこのようなc.txtを取得します。
1 2 2 4 19 A
2 2 3 3 12 B
3 2 9 2 5 C
4 3 8 0 9 D
3 2 9 2 5 C
3 2 9 2 5 C
5 5 4 1 1 E
実際に私が望む結果は
1 2 2 4 19 A
2 2 3 3 12 B
3 2 9 2 5 C
4 3 8 0 9 D
3 2 9 2 5 C
3 2 9 2 5 C
5 5 4 1 1 E
G
または
A 1 2 2 4 19
B 2 2 3 3 12
C 3 2 9 2 5
D 4 3 8 0 9
C 3 2 9 2 5
C 3 2 9 2 5
E 5 5 4 1 1
G
私にどんな提案がありますか?ありがとうございます!
ベストアンサー1
いくつかの調整を行うだけで、慎重な実験で目的の結果を得ることができます。希望する最初の結果を得るには
awk -F"\t" '
BEGIN { OFS = FS }
NR == FNR { a[$NF] = $0; pos = NF; next }
{ if ( $NF in a ) { $NF = a[$1]; } else { $pos = $1; $1 = ""; } } 1
' a.txt b.txt