[英]transposing multiple columns in bash
像这样的半成品文件
Input1 file1:45764
Input1 file1:878755
Input1 file1: 899787
Input2 file1: 45676
Input2 file1:769678
Input2 file1: 6454764
我希望将它们转换为
Input1 file1:45764, file1:878755, file1: 899787
Input2 file1:45676, file1:769678, file1: 6454764
有猜到吗? 提前致谢
awk '{b[$1]=b[$1] $2$3" "}END{for (i in b) print i,b[i]}' inputFile
将产生输出为
Input1 file1:45764 file1:878755 file1:899787
Input2 file1:45676 file1:769678 file1:6454764
它能做什么?
{b[$1]=b[$1] $2$3" "}
创建一个数组b
追加第二和第三列(因为示例中file
和value
之间存在一些空格)。 $2$3
放入阵列。 该数组是一个由Inputx
索引的关联数组,其中x
为1,2...
那是
b['Input1'] = 'file1:45764 file1:878755 file1:899787'
END
块在输入文件input
末尾执行,
for (i in b) print i,b[i]}
打印b
数组的内容
如果要在输出中使用逗号,请尝试
awk '{if(b[$1])b[$1] = b[$1]", "; b[$1] = b[$1] $2 $3}; END{for(i in b)print i, b[i]}'
或稍微更简短
awk '{b[$1]=b[$1](b[$1]?", ":"")$2$3}END{for(i in b)print i,b[i]}'
产量
Input1 file1:45764, file1:878755, file1:899787
Input2 file1:45676, file1:769678, file1:6454764
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.