возвращаем заголовки после команды awk

возвращаем заголовки после команды awk

У меня есть такой файл. Он называется sam file

@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

Я хочу отфильтровать файл по 15-му столбцу, который является XM, поэтому я написал это

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

При этом я потерял заголовки, которые начинаются с@(первые три строки). Как мне сохранить их такими, какие они есть в выводе?

Вывод должен быть таким:

@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

Связанный контент