首页 > 解决方案 > 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 次。我想把它写成一个单独的专栏。

我尝试使用 awk 执行此操作,awk '!seen[$5]++' | awk '{a[$12]=1;} END{for (k in a)n++; print n;}'但它不起作用。有人可以帮忙吗。问候,阿米特。

标签: awkmultiple-columns

解决方案


使用您显示的示例,您能否尝试以下操作。用 GNU 编写和测试awk

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


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

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

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


推荐阅读