
У меня есть такой файл. Он называется 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