如何在awk中合并一些行?

如何在awk中合并一些行?,awk,text-processing,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 我希望它看起来像这样: Adr R/W cnt 123 R 6 123 W 5 124 R 7 125 W 8 130 W 11 130 R 12 Adr W

我想合并这个文件中的一些行

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
我希望它看起来像这样:

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
这使用了GNU awk的功能:


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

@jayant awk'{a=$1;b=$2;c=$3;getline;d=$1;e=$2;f=$3;if(a==d&&b='W”)打印一个“c”f;else如果(a==d&&b='R)打印一个“f”c;else如果(a!=d&&b='W”)打印一个“c”0;else如果(a!=d&&b='R)打印一个“0”c;}谢谢。请随意编辑您的问题并添加您尝试过的内容。我认为您的解决方案不能保证输出的顺序。awk中的关联数组不一定保持顺序(据我所知)。当我运行你的代码时,我的输出是
Adr W R 130 11 12 123 5 6 124 0 7 125 8 0
因此,我重写了你例子中的第5行,并将其更改为:
{for(id in val)print id,0+val[id][“W”],0+val[id][“R”]|“sort-k1n”
,然后,它对我有效。关于排序的正确性。不过,不需要调用排序:因为这是一个特别笨拙的操作,所以在for循环之前添加
PROCINFO[“sorted_in”]=“@ind_num_asc”
。()