【发布时间】:2020-09-25 05:16:36
【问题描述】:
我正在尝试匹配包含 (123) 的行,然后将字段 2 替换为 x 和 + 的空格,这将给出 4 列。然后将第 3 列的顺序更改为第 4 列。
最终打印按第 3 列排序,然后按第 4 列排序。
我可以通过这种方式在awk输出之后得到输出管道sort命令。
$ echo "
0: 1920x1663+0+0 kpwr(746)
323: 892x550+71+955 kpwr(746)
211: 891x550+1003+410 kpwr(746)
210: 892x451+71+410 kpwr(746)
415: 891x451+1003+1054 kpwr(746)
1: 894x532+70+330 kpwr(123)
324: 894x532+1001+975 kpwr(123)
2: 894x631+1001+330 kpwr(123)
212: 894x631+70+876 kpwr(123)
61: 892x1+71+375 kpwr(0)
252: 892x1+71+921 kpwr(0)" |
awk '/\(123\)/{b = gensub(/(.+)x(.+)\+(.+)\+(.+)/, "\\1 \\2 \\4 \\3", "g", $2); print b}' |
sort -k3 -k4 -n
894 532 330 70
894 631 330 1001
894 631 876 70
894 532 975 1001
我怎样才能只使用 awk 而不需要管道 sort 来获得相同的输出?感谢您的帮助。
【问题讨论】:
-
你最好通过管道发送到
sort。awk没有任何出色的排序能力,因为awk中的数组是关联的。awk是根据需要操作列数据的正确工具,但sort是之后重新排序行的正确工具。
标签: awk