2016-09-08 3 views
0

у меня есть sort -g k9 команду на файл, который дает мне это в стандартном выводе Баша:Держите линии на основе соотношения между линиями

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-е колонка. Идея состояла бы в том, чтобы сравнить значение 9-го столбца в строке i, разделить его на значение 9-го столбца в строке i + 1, а если отношение равно 0 OR 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 (написать стандартный вывод в файл, рассчитать коэффициенты и т.д.), но по причинам, товарных я бы предпочел оболочки на основе решения (с awk или sort, например), хотя я не знаю, возможно ли это. Спасибо за вашу помощь!

ответ

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 
Смежные вопросы