我在一个文件上有sort -g k9
命令,在bash标准输出中给出了这个命令:
55.19 645 156 15 9 520 58 702 0.0 661
55.50 636 159 16 9 520 58 693 0.0 654
55.19 645 156 15 9 520 58 702 0.0 658
56.52 644 147 16 9 520 59 701 0.0 669
55.97 645 151 15 9 520 65 709 0.0 672
55.97 645 151 15 9 520 65 709 4e-124 674
28.32 671 301 32 1 507 48 702 3e-49 183
28.32 671 301 32 1 507 47 701 3e-49 183
31.40 516 247 24 86 507 196 698 1e-46 176
31.41 519 243 25 86 507 196 698 5e-46 175
27.72 588 290 26 19 481 98 675 2e-39 154
30.56 337 170 17 101 413 302 598 5e-20 96.3
30.56 337 170 17 101 413 302 598 8e-20 95.5
我想根据第9列剪切数据。我们的想法是比较 i 行第9列的值,除以 i + 1 行第9列的值,如果比率为0或0/0 OR>保留1e-50 ,行 i 和 i + 1 。只要其中一个条件未填满,请停止阅读。所需的输出是:
55.19 645 156 15 9 520 58 702 0.0 661
55.50 636 159 16 9 520 58 693 0.0 654
55.19 645 156 15 9 520 58 702 0.0 658
56.52 644 147 16 9 520 59 701 0.0 669
55.97 645 151 15 9 520 65 709 0.0 672
55.97 645 151 15 9 520 65 709 4e-124 674
我可以使用head -n 6
获取此输出,但这显然不是基于第9列中值的条件。请注意,值为“科学”格式。
我知道如何在Python中执行此操作(将标准输出写入文件,计算比率等)但出于商品原因,我更喜欢基于shell的解决方案(awk
或{{1例如)虽然我不知道这是否可能。谢谢你的帮助!
答案 0 :(得分:1)
在条件未完成时退出脚本;否则,打印上一行并存储第9个字段以在下一个循环中进行比较:
$ awk '($9 && prev/$9>1e-50) {exit} {print stored; prev=$9; stored=$0}' file
55.19 645 156 15 9 520 58 702 0.0 661
55.50 636 159 16 9 520 58 693 0.0 654
55.19 645 156 15 9 520 58 702 0.0 658
56.52 644 147 16 9 520 59 701 0.0 669
55.97 645 151 15 9 520 65 709 0.0 672
55.97 645 151 15 9 520 65 709 4e-124 674