Linux awk合并两个文件
我有下面的脚本来合并两个文件Linux awk合并两个文件,linux,awk,merge,Linux,Awk,Merge,我有下面的脚本来合并两个文件 awk -F"\t" ' {key = $1} !(key in result) {result[key] = $0; next;} { for (i=2; i <= NF; i++) result[key] = result[key] FS $i } END { PROCINFO["sorted_in"] = "@ind_str_asc" # if using GNU awk for (k
awk -F"\t" '
{key = $1}
!(key in result) {result[key] = $0; next;}
{ for (i=2; i <= NF; i++) result[key] = result[key] FS $i }
END {
PROCINFO["sorted_in"] = "@ind_str_asc" # if using GNU awk
for (key in result) print result[key]
}
' $1 $2 > $3
文件2
电流联合收割机
Key Column1 Column2 Column3 Column4 Column5
Test1 500 400 200 Good Good
Test2 499 400 200 Good Good
Test5 600 200 150 Good Good
Test6 600 199 150 Good Good
Test7 599 199 100 Good Good
Test3 Good Good
Test4 Good Good
预期联合收割机
Key Column1 Column2 Column3 Column4 Column5
Test1 500 400 200 Good Good
Test2 499 400 200 Good Good
Test5 600 200 150 Good Good
Test6 600 199 150 Good Good
Test7 599 199 100 Good Good
谢谢大家! 在存储到数组中时添加条件
{key = $1}
!(key in result) && NR == FNR {result[key] = $0; next;}
(key in result) { for (i=2; i <= NF; i++) {
result[key] = result[key] FS $i
}
}
END {
PROCINFO["sorted_in"] = "@ind_str_asc" # if using GNU awk
for (key in result) print result[key]
}
{key=$1}
!(输入结果)和&NR==FNR{result[key]=$0;next;}
(输入结果){for(i=2;i您可以尝试以下命令:
awk '
BEGIN { FS = OFS = "\t" }
{key = $1}
FNR == NR {result[key] = $0; next;}
(key in result) { for (i=2; i <= NF; i++) result[key] = result[key] FS $i }
END {
PROCINFO["sorted_in"] = "@ind_str_asc" # if using GNU awk
for (key in result) print result[key]
}
' file1 file2
您的想法是错误的。您描述的是一个join
操作,有一个非常好的UNIX工具用于此操作,它有一个非常明显的名称:
$ join file1 file2 | column -t
Key Column1 Column2 Column3 Column4 Column5
Test1 500 400 200 Good Good
Test2 499 400 200 Good Good
Test5 600 200 150 Good Good
Test6 600 199 150 Good Good
Test7 599 199 100 Good Good
或者如果您坚持awk:
$ awk 'NR==FNR{m[$1]=$2" "$3; next} {print $0, m[$1]}' file2 file1 | column -t
Key Column1 Column2 Column3 Column4 Column5
Test1 500 400 200 Good Good
Test2 499 400 200 Good Good
Test5 600 200 150 Good Good
Test6 600 199 150 Good Good
Test7 599 199 100 Good Good
句子第一列是键,$1和$2都是键。但是如果$2列有键,但$1列没有键,那么除了$1行之外,它也在组合。
没有任何意义。您应该更改它们以反映您的意思,或者删除它们。
Key Column1 Column2 Column3 Column4 Column5
Test1 500 400 200 Good Good
Test2 499 400 200 Good Good
Test5 600 200 150 Good Good
Test6 600 199 150 Good Good
Test7 599 199 100 Good Good
$ join file1 file2 | column -t
Key Column1 Column2 Column3 Column4 Column5
Test1 500 400 200 Good Good
Test2 499 400 200 Good Good
Test5 600 200 150 Good Good
Test6 600 199 150 Good Good
Test7 599 199 100 Good Good
$ awk 'NR==FNR{m[$1]=$2" "$3; next} {print $0, m[$1]}' file2 file1 | column -t
Key Column1 Column2 Column3 Column4 Column5
Test1 500 400 200 Good Good
Test2 499 400 200 Good Good
Test5 600 200 150 Good Good
Test6 600 199 150 Good Good
Test7 599 199 100 Good Good