awk用于计算列中的行数(读取)



我有一个文件,其中最后几列的读数与一个基因相关。

chr7    2457938 2457981 Naca    +   chr7    2457938 2457981 NS500455:81:HTVKJBGXC:1:11101:21577:2860    44  +
chr7    2457938 2457981 Naca    +   chr7    2457938 2457981 NS500455:81:HTVKJBGXC:1:11101:12188:3487    44  +
chr7    2457938 2457981 Naca    +   chr7    2457938 2457981 NS500455:81:HTVKJBGXC:1:11101:9524:3758 44  +
chr7    2457938 2457981 Naca    +   chr7    2457938 2457981 NS500455:81:HTVKJBGXC:1:11101:7243:4130 44  +
chr7    2457938 2457981 Naca    +   chr7    2457938 2457981 NS500455:81:HTVKJBGXC:1:11101:20035:10131   44  +
chr7    2457938 2457981 Naca    +   chr7    2457938 2457981 NS500455:81:HTVKJBGXC:1:11101:14291:16898   44  +
chr7    2457938 2457981 Naca    +   chr7    2457938 2457981 NS500455:81:HTVKJBGXC:1:11101:10796:17822   44  +
chr7    2457938 2457981 Naca    +   chr7    2457938 2457981 NS500455:81:HTVKJBGXC:1:11102:17796:2683    44  +
chr7    2457938 2457981 Naca    +   chr7    2457938 2457981 NS500455:81:HTVKJBGXC:1:11103:22603:1930    44  +
chr7    2457938 2457981 Naca    +   chr7    2457938 2457981 NS500455:81:HTVKJBGXC:1:11103:2286:7789 44  +

chr7 2457938 2457981 Naca + chr7 2457938 2457981 44 + number of reads,即列6-8出现的次数。在这个例子中,它们出现了10次。我想把这个单独列出来。

我试着用awkawk '!seen[$5]++' | awk '{a[$12]=1;} END{for (k in a)n++; print n;}'做这个,但它不起作用。有人能帮忙吗?问候,阿米特。

根据您展示的样品,您可以尝试以下操作吗?在GNUawk下编写和测试。

awk '
FNR==NR{
arr[$1]++
next
}
($1 in arr){
print $0,arr[$1]
delete arr[$1]
}
' Input_file Input_file


解决方案2:如果您的样本是按第一列排序的形式,请尝试以下操作:

awk '
prev!=$1 && prev{
print prevLine,count
}
{
prev=$1
prevLine=$0
}
END{
if(prev){
print prevLine,count
}
}
'  Input_file

注意:如果记录没有按第一列排序,则使用sort命令与Input_file并将其输出传递给第二个解决方案。

最新更新