我想比较两个文件的两个字段,如下所示:
将文件一的第二个字段与文件二的第一个字段进行比较,打印匹配(即使重复匹配)以及文件一和二的所有列。
文件1:
G4 b45 3 4
G4 b45 1 3
G3 b23 2 2
G3 b22 2 6
G3 b22 2 4
文件2:
b45 a b c
b64 d e f
b23 g h i
b22 j k l
b20 m n o
输出:
G4 b45 a b c 3 4
G4 b45 a b c 1 3
G3 b23 g h i 2 2
G3 b22 j k l 2 6
G3 b22 j k l 2 4
我使用关联数组使用以下awk命令尝试了这个:
awk 'FNR==NR {array1[$2] = $1 ; arrayrest[$2] = substr($0, index($0, $2)); next}($1 in array1) {print array1[$1] "\t" $0 "\t" arrayrest[$1]}' file1 file2
但有两个问题:
我怎样才能使这个awk命令工作得很好?提前谢谢。
答案 0 :(得分:2)
不是您想要的确切输出格式,而是正确的输出内容。
awk 'FNR==NR{seen[$1]=$0; next} ($2 in seen) {$2=seen[$2]}7' file2 file1
添加| column -t
以获得更一致的列间距。
答案 1 :(得分:1)
这对你来说应该简单明了:
awk 'NR==FNR {n[$2]=$0} {if ($1 in n) print n[$1],$2,$3,$4}' file1 file2
答案 2 :(得分:0)
小awk
awk '{x[$1]=$0}$2=x[$2]' f2 f1
如果$ 1和$ 2可以包含相同的值
awk '{x[$1]=$0}FNR!=NR&&$2=x[$2]' f2 f1
G4 b45 a b c 3 4
G4 b45 a b c 1 3
G3 b23 g h i 2 2
G3 b22 j k l 2 6
G3 b22 j k l 2 4