次の形式のテキスト ファイルがあるとします。
@ATDGGSGDTSG
NTCCCCC
+
@nddhdhnadn
@ATDGGSGDTSG
NTCCCCC
+
nddhdhnadn
これで「4」行の繰り返しパターンになり、毎回2行目、つまり「@」で始まる行の次の行、つまり2行目..6行目..などだけを印刷したいと思います。
どうすればいいですか?
perl -ne 'print if $b and !/^@/; $b=/^@/' file
とawk
:
$ awk 'NR%4==2' a
NTCCCCC
NTCCCCC
NR
番号またはレコードを表し、この場合は行番号です。それを 4 で割ると、モジュラスが 2 であるすべてのラインが得られます。
そして、出力を > "nextline" NTCCCCC > "nextline" NTCCCCC にしたい場合、つまり、出力をリダイレクトするときにその行の前に ">" を追加したいのですが。
たとえば、次のようにします。
$ awk 'NR%4==2 {print ">"; print $0}' a
>
NTCCCCC
>
NTCCCCC
もう一つの例:
$ seq 30 | awk 'NR%4==2'
2
6
10
14
18
22
26
30
awk '/^\@/{getline;print}' your_file
次のような変数を使用$printNextLine
して、すべての入力をループし1
、 @ のある行が表示されるたびに に設定し、現在の行を印刷しながら、変数が0
である場合は に戻すことができ1
ます。
他の回答ほど効果的で短くはありませんが、perl を初めて使用する人にとってはより直感的かもしれません。
awk '/^\@/{getline;print}' file