Unix 使用awk比较bam文件中列的两行
我试图比较bam文件中单个列的两行。首先在第1列中查找匹配的条目,然后,如果第1列中的条目匹配,则比较第2列并查找不匹配的条目 为了读取文件并保留标题,我首先必须打开文件并对其进行管道传输,然后使用命令以相同的格式保留:Unix 使用awk比较bam文件中列的两行,unix,awk,Unix,Awk,我试图比较bam文件中单个列的两行。首先在第1列中查找匹配的条目,然后,如果第1列中的条目匹配,则比较第2列并查找不匹配的条目 为了读取文件并保留标题,我首先必须打开文件并对其进行管道传输,然后使用命令以相同的格式保留: samtools -h file.bam | command I need here > file_filtered.bam 标题是多行的,而不仅仅是一行。所有标题行都以“@”开头 在标头之后,bam文件如下所示: 00b27c71-a833-4605-9fb3-a27
samtools -h file.bam | command I need here > file_filtered.bam
标题是多行的,而不仅仅是一行。所有标题行都以“@”开头
在标头之后,bam文件如下所示:
00b27c71-a833-4605-9fb3-a2714ac98091 ENST00000352983.6 157 60 16
00b27c71-a833-4605-9fb3-a2714ac98091 ENST00000258424.2 12 60 2048
00d77e65-466e-4fe6-ad0f-bc6b3f44af75 ENST00000367142.4 8 60 0
00d77e65-466e-4fe6-ad0f-bc6b3f44af75 ENST00000367142.4 130 12 4
我想在第一列中找到匹配的行,但在第二列中找不到匹配的行,就像上面的前两行一样。最后两行在第1列中匹配,但在第2列中也匹配,因此我对此不感兴趣。上述内容的预期输出仅为前两行:
00b27c71-a833-4605-9fb3-a2714ac98091 ENST00000352983.6 157 60 16
00b27c71-a833-4605-9fb3-a2714ac98091 ENST00000258424.2 12 60 2048
我尝试了很多awk的变体,但都没有用。还有更多的列,我想打印与条件匹配的行的所有列。任何帮助都将不胜感激
谢谢 请您尝试以下内容,并让我知道这是否对您有帮助。它读取输入_文件2次
awk 'BEGIN{FS="\t"}FNR==NR{a[$1,$2]++;next} a[$1,$2]==1' Input_file Input_file
EDIT:由于OP在评论中告知OP正在将命令的输出传递给awk
,并且OP也没有显示该命令,所以您可以使用以下命令
your_command | awk 'BEGIN{FS="\t"}FNR==1{print;next}{a[$1,$2]++;b[$1,$2]=$0} END{for(i in a){if(a[i]==1){print i,b[i]}}}'
EDIT2:根据OP保留标题,现在添加此解决方案
your_command | awk 'BEGIN{FS="\t"}FNR==1||/^@/{print;next}{a[$1,$2]++;b[$1,$2]=$0} END{for(i in a){if(a[i]==1){print b[i]}}}'
请将该示例输入所需的输出添加到您的问题中。@csijcs,它一点也不清楚,正如Cyrus所提到的,请在代码标签
{}
按钮中将示例输出添加到您的帖子中。我已经编辑过了。我想在第1列中找到所有匹配的行,但在第2列中不匹配,并打印这些行的所有列(还有许多隐藏的列,它们对比较不感兴趣)