我有一个看起来像这样的文件:
1 a
3 b
2 b
9 a
0 a
5 c
8 b
我想要...
- 仅打印第 2 列中存在的每个元素的最后一个实例及其在第 1 列中的对应值;
- 根据第 2 列的内容,按字母顺序对 1. 的结果进行排序;
- 在第 1 列之前的输出中添加第三列,其内容取决于第 2 列的值;
- 用回车替换制表符;
...所有这些都在一个 awk 程序中。
所以最终的输出会是这样的:
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 程序的内容合并到第一个中。但是,我不知道我该怎么做。任何想法 ?