列出元素awk

mar*_*ian 1 shell awk list multidimensional-array

我有一个这样的列表:

s1   d2
s1   d4
s3   d2
s4   d1
s1   d3 
s4   d1
s5   d6
s3   d5
s1   d2
s1   d3
Run Code Online (Sandbox Code Playgroud)

我需要为第一列(s_)中的每个元素获取第二列(d_)中元素的列表,其外观顺序相同.在这种情况下:

s1  d2 d4 d3 d2 d3
s3  d2 d5
s4  d1 d1    
s5  d6 
Run Code Online (Sandbox Code Playgroud)

顺序s_并不重要,顺序d_是.你能建议一个简单快速的方法吗(因为列表很大),也许是在awk?

Dan*_*ego 5

也许是这样的(对于命令行):

awk '{ vals[$1] = vals[$1] " " $2 }; END { for (key in vals) { print key,vals[key] }}' list
Run Code Online (Sandbox Code Playgroud)

格式化更漂亮的awk脚本:

{ vals[$1] = vals[$1] " " $2 }
END {
    for (key in vals) {
        print key,vals[key]
    }
}
Run Code Online (Sandbox Code Playgroud)

这样做是通过第一个值的索引存储一个包含右侧渐进值的字符串.因此,每次找到一个时,它会将其连接到该字符串的末尾.然后在最后,它打印出每一对.