结合两个不同长度的文件合并成一个文件

问题描述:

的情况是:结合两个不同长度的文件合并成一个文件

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。但缺少一些东西。替代解决方案也受到欢迎。

+0

组合的规则是什么? –

+0

我会说第一和最后一列。从file_2最后一列的顶部开始,当它重新从1开始计数时,我们移动到file_1的下一行。 – Eocene

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

'n'是前5列的值。 'id'是来自'file_1'的行。 –

+0

谢谢。那么这两个管子在做什么? – Eocene

+0

https://www.gnu.org/software/gawk/manual/html_node/Boolean-Ops.html –