将两个不同长度的文件合并为一个文件

时间:2015-11-01 23:42:06

标签: join awk

情况是:

file_1

7010-1
7010-2
7010-3

file_2

7010,xxx,yyy,7123,01
7010,xxx,yyy,7122,02
7010,xxx,yyy,9101,03
7010,xxx,yyy,7123,01
7010,xxx,yyy,7122,02
7010,xxx,yyy,9101,03
7010,xxx,yyy,7123,01
7010,xxx,yyy,7122,02
7010,xxx,yyy,9101,03
7010,xxx,yyy,7119,04
7010,xxx,yyy,7117,05
7010,xxx,yyy,7112,06

所需的输出

7010-1,xxx,yyy,7123,01
7010-1,xxx,yyy,7122,02
7010-1,xxx,yyy,9101,03
7010-2,xxx,yyy,7123,01
7010-2,xxx,yyy,7122,02
7010-2,xxx,yyy,9101,03
7010-3,xxx,yyy,7123,01
7010-3,xxx,yyy,7122,02
7010-3,xxx,yyy,9101,03
7010-3,xxx,yyy,7119,04
7010-3,xxx,yyy,7117,05
7010-3,xxx,yyy,7112,06

我不希望join成为正确的选项,因为我不希望行被预先排序(由于第2,3,4和5列),那是对的吗?宁愿选择awk,例如awk 'NR==FNR {h[$1] = $0; next} {print $1,$2,$3,$4,h[$1]}' file_1 file_2。但缺少一些东西。也欢迎替代解决方案。

1 个答案:

答案 0 :(得分:2)

awk 'BEGIN { FS=","; OFS="," }
     { if (!n || $5 < n) { getline id < "file_1" }
       $1=id; print; n=$5 }' file_2