重新编码一个巨大的文件

时间:2014-04-22 08:46:42

标签: unix text

我有一个大文件,格式如下:

#pair:  0   1   0   1   0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
0   0   1   
#pair:  1   2   0   1   1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
1   0   0   
#pair:  1   2   1   2   0   0   1
等等 我希望在Linux中使用命令可以做的是找到以“#pair:”开头的每一行,并将最后3列直接移到这一行。例如:

#pair:  1   2   1   2   0   0   1

更改为:

#pair:  1   2   1   2   
0   0   1

非常感谢你!

1 个答案:

答案 0 :(得分:1)

使用Awk很容易:

awk '/^#pair:/ { $6 = "\n" $6 }1' file >newfile

这假设字段计数是常量,并且#pair:行末尾的空格是可以容忍的。这两个假设都很容易修复或解决,但代价是代码可读性。 (如果字段数可以更改,请使用类似$(NF-2)而不是$6的内容,但是您始终需要最后三个。如果需要,请添加一个简单的sub()来修剪空格。)

正则表达式匹配以#pair:开头的行,并且操作表示在第六个字段之前添加换行符。

单独的1是一个将每个输入行打印到标准输出的awk习语。

这会读取file并将输出放在newfile