使用awk匹配不同行中的值

使用awk匹配不同行中的值,awk,Awk,我的文件类似于以下示例: 8 1 8 2 17 4 17 5 17 2 19 1 19 4 19 3 19 11 我想匹配第一列(具有相同的值),并使用awk对第二列求和,如下所示 结果将是 8 3 17 11 19 19 等等 我们将非常感谢你的帮助 $ awk '$2>0{sum[$1]+=$2} END{for (i in sum) {print i,sum[i]}}' input | sort -n 8 3 17 11 19 19 实施说明: 当awk读取文件中的每一行

我的文件类似于以下示例:

8  1
8  2
17 4
17 5
17 2
19 1
19 4
19 3
19 11
我想匹配第一列(具有相同的值),并使用awk对第二列求和,如下所示

结果将是

8 3
17 11
19 19
等等

我们将非常感谢你的帮助

$ awk '$2>0{sum[$1]+=$2} END{for (i in sum) {print i,sum[i]}}' input | sort -n
8 3
17 11
19 19
实施说明:
  • awk
    读取文件中的每一行时,命令
    $2>0{sum[$1]+=$2}
    将保存部分和

  • 读取文件后,命令
    END{for(i in sum){print i,sum[i]}
    打印出结果

  • 因为awk的数组是无序的,
    awk
    的输出被馈送到
    sort-n
    以产生视觉上令人愉悦的排序输出

更好的成型 要生成右对齐列的输出,请使用
printf
代替
print

$ awk '$2>0{sum[$1]+=$2} END{for (i in sum) {printf "%3s%3s\n",i,sum[i]}}' input | sort -n
  8  3
 17 11
 19 19
实施说明:
  • awk
    读取文件中的每一行时,命令
    $2>0{sum[$1]+=$2}
    将保存部分和

  • 读取文件后,命令
    END{for(i in sum){print i,sum[i]}
    打印出结果

  • 因为awk的数组是无序的,
    awk
    的输出被馈送到
    sort-n
    以产生视觉上令人愉悦的排序输出

更好的成型 要生成右对齐列的输出,请使用
printf
代替
print

$ awk '$2>0{sum[$1]+=$2} END{for (i in sum) {printf "%3s%3s\n",i,sum[i]}}' input | sort -n
  8  3
 17 11
 19 19
实施说明:
  • awk
    读取文件中的每一行时,命令
    $2>0{sum[$1]+=$2}
    将保存部分和

  • 读取文件后,命令
    END{for(i in sum){print i,sum[i]}
    打印出结果

  • 因为awk的数组是无序的,
    awk
    的输出被馈送到
    sort-n
    以产生视觉上令人愉悦的排序输出

更好的成型 要生成右对齐列的输出,请使用
printf
代替
print

$ awk '$2>0{sum[$1]+=$2} END{for (i in sum) {printf "%3s%3s\n",i,sum[i]}}' input | sort -n
  8  3
 17 11
 19 19
实施说明:
  • awk
    读取文件中的每一行时,命令
    $2>0{sum[$1]+=$2}
    将保存部分和

  • 读取文件后,命令
    END{for(i in sum){print i,sum[i]}
    打印出结果

  • 因为awk的数组是无序的,
    awk
    的输出被馈送到
    sort-n
    以产生视觉上令人愉悦的排序输出

更好的成型 要生成右对齐列的输出,请使用
printf
代替
print

$ awk '$2>0{sum[$1]+=$2} END{for (i in sum) {printf "%3s%3s\n",i,sum[i]}}' input | sort -n
  8  3
 17 11
 19 19