awkは2つのファイルを比較し、一致する行とゼロで埋められた一致しない行を印刷します。

awkは2つのファイルを比較し、一致する行とゼロで埋められた一致しない行を印刷します。

2つのファイルがあります。

最初のファイルの最初の列を2番目のファイルの最初の列と一致させたいと思います。一致するものがある場合は、2番目のファイルの2番目の列を印刷したい(ゼロ以外)。

awk( ) を試しましたが動作awk 'FNR==NR{a[$1]=$0;next} {print a[$1]}' 2.txt 1.txtしません。

F1.txt

A
B
C
D
E
F
G
H
I
J

F2.txt

A  0.5
E   1
H   0.5
J    1

期待される出力

A    0.5
B    0
C    0
D    0
E    1
F    0
G    0
H    0.5
I    0
J   1

ベストアンサー1

入力ファイルがタブで区切られているとします。

$ join -a 1 -e 0 -t $'\t' -o 1.1,2.2 F1.txt F2.txt 
A   0.5
B   0
C   0
D   0
E   1
F   0
G   0
H   0.5
I   0
J   1

join2つのファイル、最初のファイルのすべての行があることを確認し(-a)、フィールドが空の場合は「0」値を使用し(-e)、最初のファイルから最初のフィールドを取得し、2番目のファイルから最初のフィールドインポートします。 ()の2番目のフィールドと-oタブ文字を区切り文字として使用(-t

awkが必要な場合は、次のように作成します(ファイルパラメータの順序に注意してください)。

awk 'BEGIN {FS=OFS="\t"} NR==FNR {v[$1]=$2; next} {print $1, (v[$1] ? v[$1] : 0)}' F2.txt F1.txt

おすすめ記事