gpt4 book ai didi

awk - 使用 awk 打印排序输出以避免管道排序命令

转载 作者:行者123 更新时间:2023-12-03 23:26:33 25 4
gpt4 key购买 nike

我正在尝试匹配包含 (123) 的行然后操作字段 2 替换 x+按空间将给出 4 列。然后将第 3 列的顺序更改为第 4 列。
最后打印首先按第 3 列排序,然后按第 4 列排序。
我能够得到输出管道 sort awk 之后的命令以这种方式输出。

$ 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 ?谢谢你的帮助。

最佳答案

您可以通过以下方式从 awk 获取它(gnu) 本身:

awk '/\(123\)/{
$2 = gensub(/(.+)x(.+)\+(.+)\+(.+)/, "\\1 \\2 \\4 \\3", "g", $2)
split($2, a) # split by space and store into array a
# store array by index 3 and 4
rec[a[3]][a[4]] = (rec[a[3]][a[4]] == "" ? "" : rec[a[3]][a[4]] ORS) $2
}
END {
PROCINFO["sorted_in"]="@ind_num_asc" # sort by numeric key ascending
for (i in rec) # print stored array rec
for (j in rec[i])
print rec[i][j]
}' file
894 532 330 70
894 631 330 1001
894 631 876 70
894 532 975 1001

关于awk - 使用 awk 打印排序输出以避免管道排序命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64058213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com