gpt4 book ai didi

linux - 如何使用 linux 命令删除特定行 block ?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:18:31 24 4
gpt4 key购买 nike

我有以下数据文件,由重复的数据 block 组成。

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

同样,我的数据文件由很多数据 block 组成,每个数据 block 总共有 489 行。但真正的数据行只有486行,还有1行header行和2行tailing行。

在这里,我希望删除所有数据 block 的1个标题行和2个尾部行,(删除所有数据的第(1 * n,488 * n和489 * n)行。n =数据 block 数) 并删除所有 float 列(只读到第 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
...

这种格式。如何删除每个数据 block 的 1 个标题行 + 2 个尾行?我想我可以通过 awk print 命令阅读前 13 列。但我不知道如何从数据中删除这些额外的行。使用 awk + ​​NR 组合或其他 linux 命令有没有简单的方法来做到这一点?

谢谢

最佳答案

您可以通过使用模数仅打印特定行来过滤掉每个 block 中的非数据行。然后,您可以使用 for 循环仅打印前 13 列。

awk 'NR  % 489 != 0 && NR % 489 != 1 && NR % 489 != 488 {for (i = 1; i < 13; i++) printf "%s\t",$i; print ""}' Input.txt

一些解释:

NR是行号,从1开始。&&是逻辑AND。我们正在打印编号 mod 489 与 1、488 和 489 不匹配的所有行。

关于linux - 如何使用 linux 命令删除特定行 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26534562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com