【发布时间】:2014-12-25 04:53:47
【问题描述】:
我想比较两个文件的两个字段,如下:
比较文件一的第二个字段和文件二的第一个字段,打印匹配(即使匹配重复)以及文件一和二的所有列。
文件 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 命令正常工作?提前致谢。
【问题讨论】:
-
你试过
join吗?join -1 2 -2 1 <(sort f1) <(sort f2)几乎给出了这个输出。
标签: awk