Bash awk-通过匹配列合并两个文件,并将第二个文件的列值附加到行中
我在awk中有一个不寻常的合并请求。希望你能帮忙 文件1 文件2 输出: 规则 file1.column1应与file2.column2匹配 对于所有匹配行,应将file2.column1与file1连接起来。应追加currentLine.column3Bash awk-通过匹配列合并两个文件,并将第二个文件的列值附加到行中,bash,awk,Bash,Awk,我在awk中有一个不寻常的合并请求。希望你能帮忙 文件1 文件2 输出: 规则 file1.column1应与file2.column2匹配 对于所有匹配行,应将file2.column1与file1连接起来。应追加currentLine.column3 非常感谢,我假设这些空行实际上不在您的输入文件中 使用具有真实阵列的GNU awk: gawk -F, ' NR==FNR { prop[$2][$1] = $3; next } { pl[$2][$1] = 1 }
非常感谢,我假设这些空行实际上不在您的输入文件中 使用具有真实阵列的GNU awk:
gawk -F, '
NR==FNR { prop[$2][$1] = $3; next }
{ pl[$2][$1] = 1 }
END {
for (key in prop) {
printf "%s", key;
for (subkey in prop[key]) {
for (store in pl[subkey]) {
printf ", %s-%d", store, prop[key][subkey]
}
}
print ""
}
}
' File1 File2
用例的可能副本有点不同,但是处理第二列而不是第一列并更改输出顺序听起来并不太难,试试看,然后询问您是否一直在尝试:谢谢Tensibai,我会尝试让您知道我的问题与第一列大不相同。输出由file1.column2驱动,不应重复此值。除此之外,我仍然掌握着Awk的窍门,因此发现很难利用所有的选项。谢谢你,格伦。但是我得到了所有数组的语法错误。任何建议都会很有帮助这会带来什么回报:gawk-versionI已经获得GNU Awk 3.1.5我意识到我需要gawk 4.x和更高版本才能让阵列工作,我将尝试让您知道。谢谢,格伦-祝你周末愉快
store1,pl1
store2,pl1
store3,pl2
store4,pl3
store5,pl2
store6,pl1
prop1, store1-20, store2-20, store3-70, store4-120, store5-70, store6-20
prop2, store1-30, store2-30, store3-80, store4-130, store5-80, store6-30
prop3, store1-40, store2-40, store3-90, store4-140, store5-90, store6-40
gawk -F, '
NR==FNR { prop[$2][$1] = $3; next }
{ pl[$2][$1] = 1 }
END {
for (key in prop) {
printf "%s", key;
for (subkey in prop[key]) {
for (store in pl[subkey]) {
printf ", %s-%d", store, prop[key][subkey]
}
}
print ""
}
}
' File1 File2
prop1, store1-20, store2-20, store6-20, store3-70, store5-70, store4-120
prop2, store1-30, store2-30, store6-30, store3-80, store5-80, store4-130
prop3, store1-40, store2-40, store6-40, store3-90, store5-90, store4-140