awk 比较 2 个文件,将匹配与填充为 0 的非匹配行一起打印

Man*_*ndy 4 awk text-processing join

我有两个文件。

我想将第一个文件的第一列与第二个文件的第一列相匹配。如果有匹配项,我想打印第二个文件的第二列,如果不是 0。

我试过 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
Run Code Online (Sandbox Code Playgroud)

F2.txt

A  0.5
E   1
H   0.5
J    1
Run Code Online (Sandbox Code Playgroud)

期望输出

A    0.5
B    0
C    0
D    0
E    1
F    0
G    0
H    0.5
I    0
J   1
Run Code Online (Sandbox Code Playgroud)

gle*_*man 7

假设您的输入文件是制表符分隔的:

$ 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
Run Code Online (Sandbox Code Playgroud)

join这两个文件,确保第一个文件中的所有行都存在 ( -a),如果任何字段为空,则使用值“0” ( -e),从第一个文件中获取第一个字段,从第二个文件中获取第二个字段 ( -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
Run Code Online (Sandbox Code Playgroud)