Bash awk-通过匹配列合并两个文件,并将第二个文件的列值附加到行中

Bash 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 }

我在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 } 
    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