在bash中转置多个列

时间:2014-10-19 08:27:26

标签: bash perl

像这样的解密文件

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 

有什么猜测?提前致谢

2 个答案:

答案 0 :(得分:1)

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附加第二列和第三列(因为示例中filevalue之间有一些空格)。$2$3进入阵列。数组是由Inputx索引的关联数组,其中x1,2...

b['Input1'] = 'file1:45764  file1:878755  file1:899787'

END阻止在输入文件input

的末尾

for (i in b) print i,b[i]}打印b数组

的内容

答案 1 :(得分:0)

如果您想在输出中使用这些逗号,请尝试

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