在第三列的末尾有三个以1.0
开头的数字,如何从开头打印所有行,直到找到这三个数字中的第一个(下面以粗体显示(? 有没有一个简单的单行解决方案,带有awk或sed?
-80.2743682 -8.6420053 0
-80.2740679 -8.6418526 0.0371169854015
-80.2737584 -8.641709 0.0747022394455
-80.2734489 -8.6415562 0.112728651431
-80.2731395 -8.6414126 0.150303954286
-80.27283 -8.6412689 0.187893918808
-80.2725297 -8.6411162 0.22501096103
-80.2722202 -8.6409635 0.263032506523
-80.2719108 -8.6408198 0.300612533441
-80.2716103 -8.6406581 0.33821233839
-80.27131 -8.6405053 0.375334461391
-80.2710095 -8.6403526 0.412471166086
-80.2707001 -8.6401999 0.450482911927
-80.2703906 -8.6400471 0.488509444666
-80.2700993 -8.6398853 0.52522713763
-80.2697989 -8.6397326 0.562354088058
-80.2694894 -8.6395709 0.600828217536
-80.2691981 -8.6394181 0.637071247595
-80.2688886 -8.6392473 0.676023425931
-80.2685882 -8.6390946 0.713150425596
-80.2682788 -8.6389509 0.750730603804
-80.2679783 -8.6387981 0.787872459485
-80.2676599 -8.6386635 0.825947927083
-80.2673686 -8.6385108 0.862185868818
-80.2670501 -8.6383762 0.900271491364
-80.2667406 -8.6382235 0.938293256103
-80.2664311 -8.6380798 0.975883478883
-80.2661217 -8.6379452 **1.01304928976** <--- print until here
-80.2658214 -8.6378015 1.04972439283
-80.2655029 -8.6376578 1.08821462134
任何帮助都非常感谢。
使用 awk 是:
awk '$3>=1{exit} 1' file
你能试试下面吗?仅使用显示的示例进行编写和测试。
awk '1;$NF~/^1.0/{exit}' Input_file
此外,如果您的Input_file有超过 3 个字段,请将上面的字段更改为:
awk '1;$3~/^1.0/{exit}' Input_file
抱歉,如果您需要打印到第 3 次出现1.0
然后尝试以下操作,我对描述有点混淆(尽管您显示的粗体行只想打印到第一次出现,但添加它以防万一有人需要它(。
awk '1;$NF~/^1.0/ && ++count==3{exit}' Input_file
sed -r '1,/.+ +.*+ +0.263/ p' -n < Input_file
这个 sed 说:
- 不要打印
Input_file
中的任何内容 - 除了,从第 1 行开始
- 直到线路匹配
/.+ +.*+ +0.263/
。这意味着:- 1 个或多个字符,后跟
- 1 个或多个空格,后跟
- 1 个或多个字符,后跟
- 1 个或多个空格,后跟
- 数字 0.263
- 打印这些行
正则表达式绝对可以通过指定行首和空格与制表符来改进。但总体思路就在那里。