テキストファイルの一部出力 [閉じる]

テキストファイルの一部出力 [閉じる]

私の入力は次のとおりです。

>gi|481443199|gb|MH447771.1|
49      0       0       0       1
50      0       0       1       0
>gi|987078004|gb|RTYJ01067061.1|
412     0       0       1       0
413     1       0       0       0
>gi|557075006|gb|ERTJ01078061.1|
41     0       0       1       0
41     1       0       0       0
>gi|787073002|gb|WERJ01045061.1|
612     0       0       1       0
613     1       0       0       0
>gi|887079001|gb|WERJ01045061.1|
715     0       0       1       0
716     1       0       0       0

一部の行を印刷したいが、で始まる他のすべての行はスキップされ、>その後のすべての行は次の行までスキップされます>。上記の入力例の場合、出力は次のようになります。

>gi|481443199|gb|MH447771.1|
49      0       0       0       1
50      0       0       1       0
>gi|557075006|gb|ERTJ01078061.1|
41     0       0       1       0
41     1       0       0       0
>gi|887079001|gb|WERJ01045061.1|
715     0       0       1       0
716     1       0       0       0

どうすればいいですか?

ベストアンサー1

他のすべての> ...ブロックをスキップするには:

 awk '/^>/ { p = !p } p' input.txt

p印刷フラグです。デフォルトのジョブはコンテンツが提供されていないときであるため、p印刷時にtrueを表します。では、変数は空の状態で始まり、ブール値コンテキストでfalseと評価されます。行に達するたびにフラグが切り替わります。pprintawk> ...p

n各ブロックを行で区切って印刷するには、次の手順を実行します> ...

awk -v n=200 '/^>/ { if (skip == 0) skip = n - 1; else --skip; } skip == n - 1' input.txt

同様のロジックです。n2ではないため、ブールフラグの代わりにカウンタを使用する必要があります。ここでは、skip印刷を再開する前にスキップする回数を数えます。> ...私はskip == n - 1ショートカットとして印刷フラグとして使用します。

おすすめ記事