我有两个文件。
我想将第一个文件的第一列与第二个文件的第一列匹配。如果有匹配项,我想打印第二个文件的第二列(如果不是 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
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
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