У меня есть файл, который в основном содержит расположения значений, как представлено ниже (я пронумеровал строки.)
! MATCH 1
! 2
HIT 3
NUM 1 4
VAL A 82 5
LEU A 144 6
ALA A 154 7
VAL A 333 8
ALA A 334 9
PHE A 372 10
END 11
! 12
Я пытаюсь создать файл, который содержит все экземпляры, в которых эти блоки значенийсодержать PHE в строке 10, как указано выше (в отличие от ALA или VAL и т. д.).
краткий пример нескольких блоков значений в файле:
! MATCH
!
HIT
NUM 1
VAL A 184
PHE A 209
END
!
! MATCH
!
HIT
NUM 1
LEU A 296
ILE A 321
END
!
! MATCH
!
HIT
NUM 1
LEU A 296
PHE A 321
END
!
Myкод, пытающийся сделать это:
sed -n '23~12p' file.txt | grep -B 9 -A 2 PHE > newfile.txt
По сути, начиная со строки 23, пропускайте каждые 12 строк (чтобы посмотреть только строку 10 блока значений), затем выполняйте grep предыдущих 9 строк и последующих2, если PHE присутствует в строке 10 блока значений.
Однако, как я уверен, вы можете сказать, приведенный выше код выводит только предыдущие строки в выводе sed.
sed -n '23~12p' file.txt | grep -B 9 -A 2 PHE file.txt > newfile.txt
Но если я добавлю файл (file.txt) для grep, он проигнорирует вывод sed и вместо этого отобразит предыдущие строки, даже если PHE не находится в десятой строке блока значений.
IE:
ILE A 222
END
!
! MATCH
!
HIT
NUM 1
ILE A 605
ILE A 620
PHE A 644 <--- What grep is matching
VAL A 633
ALA A 634
Я немного запутался, какw, чтобы написать этот скрипт для поиска PHE в позиции, которую я ищу (позиция 10), ища его каждые 12 строк и вычеркивая весь блок значений (предыдущие 9 строк и последующие 2 строки), только если PHEнашел в позиции 10.
Буду рад любым советам!Спасибо!