awkコマンドの後にタイトルを挿入します。

awkコマンドの後にタイトルを挿入します。

このようなファイルがあります。 samファイルといいます。

@HD VN:1.0  SO:unsorted
@SQ SN:RNU2-1   LN:388
@SQ SN:RNU6-1100P   LN:304
SRR959756.23    0   RNU2-1  56  0   6S32M12S    *   0   0   CACAGCAATATCTGATACGTCCTCTATCCGAGGACAATTGGAATTCTCGG  hhhhhhhhhhhhhhhhhhhhhhghhghhhhhhhhhhhhhhfhhhhhhghf  AS:i:64 XS:i:64 XN:i:0  XM:i:0  XO:i:0  XG:i:0  NM:i:0  MD:Z:32 YT:Z:UU
SRR959756.23    256 RNU2-2P 56  0   6S32M12S    *   0   0   CACAGCAATATCTGATACGTCCTCTATCCGAGGACAATTGGAATTCTCGG  *   AS:i:64 XS:i:64 XN:i:0  XM:i:0  XO:i:0  XG:i:0  NM:i:0  MD:Z:32 YT:Z:UU
SRR959756.23    256 RNU2-6P 55  0   6S32M12S    *   0   0   CACAGCAATATCTGATACGTCCTCTATCCGAGGACAATTGGAATTCTCGG  *   AS:i:56 XS:i:64 XN:i:0  XM:i:4  XO:i:0  XG:i:0  NM:i:1  MD:Z:11T20  YT:Z:UU

XMの15列のファイルをフィルタリングしたいので、このように書きました。

awk '$15 ~ /^XM:i:0/ || $15 ~ /^XM:i:1/ || $15 ~ /^XM:i:2/ || $15 ~ /^XM:i:3/ {print $0}' file.txt

これで失われました。@(最初の3行)。出力にそのまま残すにはどうすればよいですか?

出力は次のようにする必要があります

@HD VN:1.0  SO:unsorted
@SQ SN:RNU2-1   LN:388
@SQ SN:RNU6-1100P   LN:304
SRR959756.23    0   RNU2-1  56  0   6S32M12S    *   0   0   CACAGCAATATCTGATACGTCCTCTATCCGAGGACAATTGGAATTCTCGG  hhhhhhhhhhhhhhhhhhhhhhghhghhhhhhhhhhhhhhfhhhhhhghf  AS:i:64 XS:i:64 XN:i:0  XM:i:0  XO:i:0  XG:i:0  NM:i:0  MD:Z:32 YT:Z:UU
SRR959756.23    256 RNU2-2P 56  0   6S32M12S    *   0   0   CACAGCAATATCTGATACGTCCTCTATCCGAGGACAATTGGAATTCTCGG  *   AS:i:64 XS:i:64 XN:i:0  XM:i:0  XO:i:0  XG:i:0  NM:i:0  MD:Z:32 YT:Z:UU

何百ものように、より多くのヘッダー行(@で始まる)があるかもしれません。最初の3行だけを使用しました。

ベストアンサー1

私はこれを試してみました。

awk '$0 ~ /^@/ || $15 ~ /^XM:i:0/ || $15 ~ /^XM:i:1/ || $15 ~ /^XM:i:2/ || $15 ~ /^XM:i:3/ {print $0}' file.txt

おすすめ記事