shell脚本:重新排列列

时间:2012-06-14 07:57:13

标签: shell text edit

我有一个文本文件(标签分隔),由17列组成。我想以这种方式改变这种结构。保留从1到6的列,直到文件的末尾,然后将列从7到16(我可以除去17)列在彼此之下,因此对于每列,重复每个从1到5的列。我补充道。这意味着我还需要添加一个具有相同数字的额外列,直到下一个添加的开始,以便跟踪我追加的列并查看它开始的哪一行。

希望这很清楚。

感谢您的宝贵时间和支持。

原始

179    1   AA     19.50    30.00  1.0000  2.0000  3.0000 ...  
180    1   BB     19.75    30.00  4.0000  5.0000  6.0000 ...  
230    1   CC     32.25    30.00  7.0000  8.0000  9.0000 ...  

所需

179    1  1 AA     19.50     30.00  1.0000    
180    1  1 BB     19.75     30.00  4.0000    
230    1  1 CC     32.25     30.00  7.0000  
179    1  2 AA     19.50     30.00  2.0000   
180    1  2 BB     19.75     30.00  5.0000    
230    1  2 CC     32.25     30.00  8.0000   
179    1  3 AA     19.50     30.00  3.0000    
180    1  3 BB     19.75     30.00  6.0000    
230    1  3 CC     32.25     30.00  9.0000   

1 个答案:

答案 0 :(得分:1)

这个想法如何(使用awk挑选列数据,使用临时输出文件来保存数据):

rearrange.awk:

{
   for (i=6; i<=NF; ++i) {
      print $1, $2, (i-5), $3, $4, $5, $i > "temp_output"i".txt"
   }
}

然后将在脚本中使用:

awk -f rearrange.awk < input.txt
cat temp_output*.txt > output.txt
rm temp_output*.txt