【发布时间】:2014-10-24 02:56:48
【问题描述】:
我有以下数据文件,由重复的数据块组成。
486 Examples Iteration: 300000 #Bonds: 10
1 6 3 5 7 371 0 0 0 0 0 0 1 0.935 0.932 0.955 0.852 0.000 0.000 0.000 0.000 0.000 0.000 3.736 0.000 1.303
2 6 4 143 386 389 0 0 0 0 0 0 1 0.892 0.877 0.855 0.918 0.000 0.000 0.000 0.000 0.000 0.000 3.751 0.000 0.999
3 3 1 18 0 0 0 0 0 0 0 0 1 0.935 0.901 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.926 2.000 -0.708
4 3 2 18 0 0 0 0 0 0 0 0 1 0.892 0.923 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.829 2.000 -0.756
...
482 3 16 483 0 0 0 0 0 0 0 0 1 0.954 0.831 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.809 2.000 -0.716
483 2 482 0 0 0 0 0 0 0 0 0 1 0.831 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.884 0.000 0.457
484 2 485 0 0 0 0 0 0 0 0 0 105 0.865 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.936 0.000 0.372
485 3 213 484 0 0 0 0 0 0 0 0 105 0.835 0.865 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.779 2.000 -0.665
486 2 440 0 0 0 0 0 0 0 0 0 44 0.829 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.896 0.000 0.345
634.597636118845 347.992894465888 1330.58342505062
-1.280885974547230E-005
486 Examples Iteration: 300001 #Bonds: 10
1 6 3 5 7 371 0 0 0 0 0 0 1 0.935 0.932 0.955 0.852 0.000 0.000 0.000 0.000 0.000 0.000 3.736 0.000 1.303
2 6 4 143 386 389 0 0 0 0 0 0 1 0.892 0.877 0.855
...
同样,我的数据文件由很多数据块组成,每个数据块总共有 489 行。但是真正的数据行只有486行,而且有1个header line和2个tailing line。
在这里,我希望为所有数据块删除1个标题行和2个尾行,(删除所有数据的每(1 * n,488 * n和489 * n)行。n =数据块的数量) 并删除所有浮动列(仅读取到第 13 列)。所以,我希望得到像
这样的文件 1 6 3 5 7 371 0 0 0 0 0 0 1
2 6 4 143 386 389 0 0 0 0 0 0 1
3 3 1 18 0 0 0 0 0 0 0 0 1
...
484 2 485 0 0 0 0 0 0 0 0 0 105
485 3 213 484 0 0 0 0 0 0 0 0 105
486 2 440 0 0 0 0 0 0 0 0 0 44
1 6 3 5 7 371 0 0 0 0 0 0 1
2 6 4 143 386 389 0 0 0 0 0 0 1
...
这种格式。如何删除每个数据块的 1 个标题行 + 2 个尾行?我想我可以通过 awk print 命令读取前 13 列。但我不知道如何从数据中删除那些额外的行。是否有使用 awk + NR 组合或其他 linux 命令的简单方法?
谢谢
【问题讨论】:
-
页眉和尾行是否有唯一可识别的信息?字段的数量对此有用吗?
-
@EtanReisner 一些页眉和尾行在未来的分析中很有用,但我有 fortran 90 代码可以做到这一点。目前,我只对删除标题和尾行感兴趣,并删除 14~last 列。
-
你试过什么?我很乐意帮助您编写 awk 脚本,但您需要发布代码以便我们帮助您改进它。
-
说您只想保留具有 16 个字段的行是否有效?如果是这样,那么
awk 'NF == 16 { $14=""; $15=""; $16=""; print}' file.dat可能就足够了......