gpt4 book ai didi

每个数据 block 的 linux awk 和 grep 特定行

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:57:56 28 4
gpt4 key购买 nike

我有一个总共 1000 行的文件,由 10 个数据 block 组成。每个数据 block 有 100 行。看起来像

.... 
98
0 -40237.30 16.89 19.51 90.00 90.00 90.00 90.00
Si 1.03311 4.82796 43.16361 1 -342.75159
O 1.83529 2.77329 49.93318 1 -96.97488
O 5.35427 0.19473 46.20120 1 -103.69066
O 2.45071 5.03078 49.23054 1 -99.25241
.....
O 6.14626 12.60099 40.48765 1 -103.96326
O 14.02932 16.70495 49.61010 1 -86.95440
98
50 -40226.57 16.89 19.51 90.00 90.00 90.00 90.00
Si 1.02182 4.80803 43.16740 1 -353.40357
O 1.85563 2.79949 49.91912 1 -96.85369
...

所以它有两个标题行和 98 个数据行。标题行中的'98'表示数据行数。

在这里,我想从每个数据 block 中 grep 5 行,第 1、11、56、78 和 92 行,并以与原始文件类似的格式打印它们,如

...

5

O 13.62134 8.31539 48.25986 1 -75.85881
O 9.01739 6.38846 50.60192 1 -2.55755
O 14.76930 15.88060 42.57059 1 -79.24684
Si 7.58364 10.90020 43.49788 1 -348.34842
Si 13.15177 12.05531 40.63252 1 -262.49178
5

O 11.01042 14.50491 45.42672 1 -45.13971
O 3.99057 0.69779 44.08524 1 -147.51776
O 11.84402 0.82791 40.78757 1 -92.14344
Si 4.80766 10.22501 49.57940 1 -297.04787
Si 6.14936 17.03883 40.37907 1 -209.38634
....

像这样。从每条数据行中仅 grep 5 行(第 1、11、56、78 和 92),并像上面的示例一样堆叠。结果文件共70行,由10个数据 block 组成,每个数据 block 7行(2个标题行+5个数据行)

我对使用“grep”命令来 grep 特定行没问题,但我不知道如何在数据 block 方面使用 grep,并像那样堆叠。我在考虑 awk 和 grep 的组合,但我想不通。

最佳答案

awk 中的另一种类似方式

由于第一条记录之前的两个标题行,所有数字都是你说的数字的+2

awk '(NR%100)~/^(3|13|58|80|94)$/' file

解释

(NR%100)   If NR%100 (which will effectively loop every 100 from 0-99

~ Contains

^ $ Anchors so that only these exact values are used and not say 12 22 32 etc

| regex or

() a grouping

如果参数解析后没有 block ,awk 中的默认操作是打印,因此如果参数为真,即 mod 100 等于任何数字,则打印该行。

如果你想每第一条记录打印5条(关于第100条)

  awk '(x=NR%100)==1{print 5"\n"}x~/^(3|13|58|80|94)$/' file

关于每个数据 block 的 linux awk 和 grep 特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27257015/

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