如何在awk中合并一些行?
我想合并这个文件中的一些行 file.txt如下所示:如何在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
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”
。()