【发布时间】:2015-04-06 17:46:23
【问题描述】:
我通过 AWK 命令将两个不同的文件与 Same Key 组合在一起。 如果没有与 File1 和 File2 比较的键匹配,那么只需 换成“\t\t\t”。
我有以下 AWK 命令。
awk -F"\t" '
{key = $1}
NR == 1 {header = key}
!(key in result) {result[key] = $0 ; next}
{ for (i=2; i <= NF; i++) result[key] = result[key] FS $i }
END {
print result[header],"\tValue2","\tValue3","\tValue4"
delete result[header]
PROCINFO["sorted_in"] = "@ind_str_asc" # if using GNU awk
for (key in result) print result[key]
}
' $1 $2 > $3
示例组合 文件1
Key Value1
A 10000
B 20000
C 30000
D 40000
文件2
B 50000 20000 10000
C 20000 10000 50000
那么预期的结果
Key Value1 Value2 Value3 Value4
A 10000 - - -
B 20000 50000 20000 10000
C 30000 20000 10000 50000
D 40000 - - -
我的 AWK 命令秀
Key Value1 Value2 Value3 Value4
A 10000
B 20000 50000 20000 10000
C 30000 20000 10000 50000
D 40000
我已经尝试过以下几种方式
!(key in result) {result[key] = $0"\t-\t-\t-" ; next}
但看起来这并不涵盖所有情况。 有人有更好的主意吗? 谢谢!
【问题讨论】:
-
请包含(并添加注释表明)您的
$0"\t-\t-\t-"逻辑未涵盖的记录。否则,很好的问题。祝你好运。 -
您可能想阅读
join...