如何在awk中合并一些行?

时间:2015-11-02 17:20:04

标签: awk text-processing

我想合并此文件中的某些行。

file.txt如下所示:

Adr R/W cnt
123 R   6
123 W   5
124 R   7
125 W   8
130 W   11
130 R   12

我希望它看起来像这样:

Adr W   R
123 5   6
124 0   7
125 8   0
130 11  12

到目前为止我已尝试过这个:

awk '{a=$1; b=$2; c=$3; getline; d=$1; e=$2; f=$3;
    if(a==d && b=="W")
        print a " " c " " f;
    else if(a==d && b=="R")
        print a " " f " " c;
    else if (a!=d && b=="W")
        print a " " c " 0";
    else if(a!=d && b=="R")
        print a " 0 " c;}' file.txt

1 个答案:

答案 0 :(得分:2)

这使用GNU awk' array of arrays功能:

gawk '
  NR>1 {val[$1][$2] = $3} 
  END {
    print "Adr W R"
    for (id in val) print id, 0 + val[id]["W"], 0 + val[id]["R"]
  }
' file.txt | column -t
  
Adr  W   R
123  5   6
124  0   7
125  8   0
130  11  12

将零添加到未定义的值将返回数字零。