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

时间:2014-12-12 15:10:39

标签: bash awk

我在awk中有一个不寻常的合并请求。希望你能帮忙。

File1中

pl1,prop1,20

pl1,prop2,30

pl1,prop3,40

pl2,prop1,70

pl2,prop2,80

pl2,prop3,90

pl3,prop1,120

pl3,prop2,130

pl3,prop3,140

文件2

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

规则

  1. file1.column1应与file2.column2
  2. 匹配
  3. 对于所有匹配的行 - file2.column1应该与file1.currentLine连接。应该追加column3
  4. 非常感谢,

1 个答案:

答案 0 :(得分:0)

我假设这些空行实际上不在您的输入文件中。

使用具有真正数组数组的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
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