Loops 在awk中嵌套for循环以计算匹配值的字段数

Loops 在awk中嵌套for循环以计算匹配值的字段数,loops,awk,Loops,Awk,我有一个包含两列(140万行)的文件,如下所示: CLM MXL 0 0 0 1 1 1 1 1 0 0 29 42 0 0 30 15 我想数一数每种可能的价值组合的实例;例如,如果有x行,其中列CLM等于0,列MXL匹配1,我想打印: 0 1 x 因为列CLM的最大值是188,列MXL的最大值是128,所以我尝试在awk中使用一个嵌套的for循环,它看起来像: awk '{for (i=0; i<=188; i++) {for (j=0; j<=128; j++) {if($

我有一个包含两列(140万行)的文件,如下所示:

CLM MXL
0 0
0 1
1 1
1 1
0 0
29 42
0 0
30 15
我想数一数每种可能的价值组合的实例;例如,如果有x行,其中列CLM等于0,列MXL匹配1,我想打印:

0 1 x
因为列CLM的最大值是188,列MXL的最大值是128,所以我尝试在awk中使用一个嵌套的for循环,它看起来像:

awk '{for (i=0; i<=188; i++) {for (j=0; j<=128; j++) {if($9==i && $10==j) {print$0}}}}' 1000Genomes.ALL.new.txt > test
awk'{for(i=0;i1.纯
awk
解决方案 工作原理 代码使用单个变量
c
c
是一个关联数组,其键是文件中的行,其值是出现的次数

  • NR>1{c[$0]+}

    对于除第一行(具有标题)之外的每一行,这将增加该行中组合的计数

  • END{for(k in c)print k,c[k]}

    这会打印出最后的计数

  • sort-n

    这只是为了美观:它将输出行按可预测的顺序排列

2.使用uniq-c的备选方案 工作原理
  • tail-n+2文件

    这将打印除第一行以外的所有文件。其目的是删除列标题

  • sort-n | uniq-c

    这将对行进行排序,然后对重复的行进行计数

  • awk'{print$2,$3,$1}

    uniq-c
    将计数放在第一位,您希望计数是行中的最后一个。这只是将列重新排列为您想要的格式

1.纯粹的
awk
解决方案 工作原理 代码使用单个变量
c
c
是一个关联数组,其键是文件中的行,其值是出现的次数

  • NR>1{c[$0]+}

    对于除第一行(具有标题)之外的每一行,这将增加该行中组合的计数

  • END{for(k in c)print k,c[k]}

    这会打印出最后的计数

  • sort-n

    这只是为了美观:它将输出行按可预测的顺序排列

2.使用uniq-c的备选方案 工作原理
  • tail-n+2文件

    这将打印除第一行以外的所有文件。其目的是删除列标题

  • sort-n | uniq-c

    这将对行进行排序,然后对重复的行进行计数

  • awk'{print$2,$3,$1}

    uniq-c
    将计数放在第一位,您希望计数是行中的最后一个。这只是将列重新排列为您想要的格式

$ awk 'NR>1{c[$0]++} END{for (k in c)print k,c[k]}' file | sort -n
0 0 3
0 1 1
1 1 2
29 42 1
30 15 1
$ tail -n+2 file | sort -n | uniq -c | awk '{print $2,$3,$1}'
0 0 3
0 1 1
1 1 2
29 42 1
30 15 1