Arrays 按awk中的字母顺序对数组排序
我有一个文件,看起来像这样:Arrays 按awk中的字母顺序对数组排序,arrays,awk,Arrays,Awk,我有一个文件,看起来像这样: 1 a 3 b 2 b 9 a 0 a 5 c 8 b 我想 仅打印第2列中每个元素的最后一个实例及其在第1列中的对应值 对1的结果进行排序。根据第2栏内容按字母顺序排列 在第1列之前的输出中添加第三列,其内容取决于第2列的值 通过回车替换标签 。。。所有这些都在一个awk程序中实现 因此,最终输出类似于: x 0 a x 8 b y 5 c 我成功地完成了这一切,但使用了两个awk程序和一个外部命令: awk -F '
1 a
3 b
2 b
9 a
0 a
5 c
8 b
我想
x
0
a
x
8
b
y
5
c
我成功地完成了这一切,但使用了两个awk程序和一个外部命令:
awk -F '\t' '{
value[$2]=$2"\t"$1 }
END { for (i in value) print value[i]
}' | \
sort -dfb | \
awk -F '\t' '{
if ($1 == "a" || $1=="b") print "x\n"$2"\n"$1
if ($1 == "c") print "y\n"$2"\n"$1
}'
一种更简单的方法是按字母顺序对第一个awk程序的数组进行排序。这将允许将第二个awk程序的内容合并到第一个awk程序中。然而,我不知道我如何才能做到这一点。有什么想法吗?GNU awk=4:
这是六年前的事了,我在这里回答。。。如果我理解该请求,则值列表为:
1 a
3 b
2 b
9 a
0 a
5 c
8 b
仅为列2的1个实例处理,关联值最低的为列1。预期结果:
0 a
2 b
5 c
通过使用2种排序而不是awk,该过程似乎最简单。捕获文件中的值列表时,以下命令将显示结果:
$ sort +0 -1n FILE|sort +1 -2 -u
0 a
2 b
5 c
每个唯一的第2列的顺序相反或第1列的最高值
$ sort +0 -1nr FILE|sort +1 -2 -u
9 a
8 b
5 c
如果awk优先于排序,则以下awk程序可以执行操作,为每个唯一的第2列条目获取最小值:
$ awk '{if($2 in COL2){if(COL2[$2]>$1){COL2[$2]=$1}}else{COL2[$2]=$1}}END{for(I in COL2){print COL2[I],I}}' FILE
0 a
2 b
5 c
与此相反,每个唯一的第2列条目的第1列的最大值是通过将“>”替换为
$ sort +0 -1nr FILE|sort +1 -2 -u
9 a
8 b
5 c
$ awk '{if($2 in COL2){if(COL2[$2]>$1){COL2[$2]=$1}}else{COL2[$2]=$1}}END{for(I in COL2){print COL2[I],I}}' FILE
0 a
2 b
5 c
$ awk '{if($2 in COL2){if(COL2[$2]<$1){COL2[$2]=$1}}else{COL2[$2]=$1}}END{for(I in COL2){print COL2[I],I}}' FILE
9 a
8 b
5 c