gpt4 book ai didi

shell - 使用自定义排序顺序对 Unix 中的字母数字字符串进行排序

转载 作者:行者123 更新时间:2023-12-01 22:22:49 27 4
gpt4 key购买 nike

我有一份姓名列表,但顺序不正确。如何使用字母部分的自定义排序顺序,以正确的字母数字顺序排列它们?

我的文件numbers.txt:

alpha-1
beta-3
alpha-10
beta-5
alpha-5
beta-1
gamma-7
gamma-1
delta-10
delta-2

要点是我的脚本应该认识到它应该在 beta 之前打印 alpha,在 gamma 之前打印 beta code> 和 delta 之前的 gamma

也就是说,单词应该根据它们所代表的希腊字母表中的字母顺序进行排序。

预期订单:

alpha-1
alpha-5
alpha-10
beta-1
beta-3
beta-5
gamma-1
gamma-7
delta-2
delta-10

PS:我尝试使用sort -nnumbers.txt,但它不符合我的需要。

最佳答案

您可以使用辅助 awk 命令,如下所示:

awk -F- -v keysInOrder="alpha,beta,gamma,delta" '
BEGIN {
split(keysInOrder, a, ",")
for (i = 1; i <= length(a); ++i) keysToOrdinal[a[i]] = i
}
{ print keysToOrdinal[$1] "-" $0 }
' numbers.txt | sort -t- -k1,1n -k3,3n | cut -d- -f2-
  • awk 命令用于:

    • 将自定义键映射到反射(reflect)所需排序顺序的数字上;请注意,完整的键列表必须按顺序通过变量 keysInOrder 传递。

    • 将数字作为辅助列添加到输入之前,也使用分隔符 - ;例如,beta-3 变为 2-beta-3,因为 beta 位于有序列表中的位置 2排序键。

  • sort 然后根据映射数字以及第二列中的原始数字对 awk 的输出进行排序,得到所需的自定义排序顺序。

  • cut 然后删除辅助。再次映射数字。

关于shell - 使用自定义排序顺序对 Unix 中的字母数字字符串进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41804397/

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