2012-06-14 72 views
1

我有一个由17列组成的文本文件(制表符分隔)。我想以这种方式改变这种结构。保存从1到6的列,直到文件的结尾,然后在7到16之间添加列(我可以删除17),然后重复从1到5的每列,我补充说。这意味着我还需要添加一个具有相同数字的额外列,直到下一个添加的开始,以便跟踪我追加的列并查看它开始的哪一行。shell脚本:重新排列列

希望这个已经够清楚了。

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

原始

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 
+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