Я пытаюсь создать два файла из входного файла. Выходные файлы будут иметь одинаковую информацию заголовка (взятую из исходного файла), и я затем хочу выделить последующие строки на основе значения.
В данный момент я застрял, когда кажется, что, когда строка завершается неудачно с оператором «если», последнее значение, которое она имела, все еще добавляется, я думаю.
Мой ввод выглядит примерно так: -
#START STOP INFO
1 100 700 Q=2;S=40;LENGTH=600
2 300 350 Q=5;S=50;LENGTH=50
3 567 601 Q=3;S=2;LENGTH=34
Мой код выглядит так: -
awk -v short="" -v long="" 'BEGIN{FS="\t"}{if ($1 !~/#/) {sub(/.*LENGTH=/, ""); sub(/;.*/, ""); if ($NF >= 500 ) { long=$0 }} else { long=$0; short=$0 }}{print long}' test.txt
Мой вывод для длинного файла выглядит так: -
#START STOP INFO
1 100 700 Q=2;S=40;LENGTH=600
1 100 700 Q=2;S=40;LENGTH=600
1 100 700 Q=2;S=40;LENGTH=600
И вывод для короткого файла выглядит так: -
#START STOP INFO
#START STOP INFO
#START STOP INFO
В то время как я хочу, чтобы «long» должен выглядеть так:
#START STOP INFO
1 100 700 Q=2;S=40;LENGTH=600
И «коротким» будет: -
#START STOP INFO
2 300 350 Q=5;S=50;LENGTH=50
3 567 601 Q=3;S=2;LENGTH=34
(т. Е. Значение длины для следующих двух строк меньше 500 и поэтому должно быть добавлено к «короткой» строке, но по какой-то причине предыдущая строка - та, которая больше 500 - добавляется дважды)