Wenn Sie die Zeile nach der Zeile mit >block2
ausdrucken möchten, dann können Sie verwenden:
awk '/^>block2$/ { nr=NR+1 } NR == nr { print }'
Verfolgen Sie die Datensatznummer plus 1, wenn Sie das Spiel zu finden; Wenn die aktuelle Datensatznummer mit der gespeicherten übereinstimmt, drucken Sie den aktuellen Datensatz.
Wenn Sie alle Zeilen zwischen der Zeile wollen >block2
und >block3
, dann würden Sie verwenden:
awk '/^>block2$/,/^>block3/ {if ($0 !~ /^>block[23]$/) print }'
Für alle Linien zwischen den beiden Markierungen, wenn die Linie es nicht so oder Marker übereinstimmen, drucken . Die Ausgabe ist mit der Beispieldatendatei identisch.
Es gibt keine Linie ist enthalten ' > block2> 'in Ihrer Eingabe, so dass nichts gedruckt werden konnte. –
Es gibt mehrere Duplikate wie http://stackoverflow.com/questions/34670874/how-to-extract-fasta-sequence-using-sequence-id-shell-script, obwohl diejenigen, die ich schnell finden könnte alle die> Header enthalten würden Linie in der Ausgabe. Dies zu ändern sollte sowieso trivial sein. – tripleee
Warum sollte die Ausgabe '222222' von einem Muster erwartet werden, das eine nicht optionale Übereinstimmung für' block2' enthält und keine Bearbeitung auf den übereinstimmenden Text angewendet wird? Erwarten Sie, dass 'grep X'' Y' ausgibt? – Kaz