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?
也许是这样的(对于命令行):
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)
这样做是通过第一个值的索引存储一个包含右侧渐进值的字符串.因此,每次找到一个时,它会将其连接到该字符串的末尾.然后在最后,它打印出每一对.