gpt4 book ai didi

linux - 对查找命令进行排序以遵守 Unix 中的自定义顺序

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:41:34 24 4
gpt4 key购买 nike

我有一个输出文件路径的脚本(通过 find),我想根据非常具体的自定义逻辑对其进行排序:

  • 第一个排序键:我希望根据我提供的键列表使用自定义排序对第二个和第三个--separated 字段进行排序- 但不包括数字后缀。
    使用下面的示例输入,键列表为:
    rp,alpha,beta-ri,beta-rs,RC

  • 第二个排序键:数字按每行的尾随数字排序。

给定以下示例输入(注意每行的 /foo/bar/test/example/8.2.4.0 前缀是偶然的):

/foo/bar/test/example/8.2.4.0-RC10
/foo/bar/test/example/8.2.4.0-RC2
/foo/bar/test/example/8.2.4.0-RC1
/foo/bar/test/example/8.2.4.0-alpha10
/foo/bar/test/example/8.2.4.0-beta-ri10
/foo/bar/test/example/8.2.4.0-beta-ri2
/foo/bar/test/example/8.2.4.0-beta-rs10
/foo/bar/test/example/8.2.4.0-beta-rs2
/foo/bar/test/example/8.2.4.0-alpha2
/foo/bar/test/example/8.2.4.0-rp10
/foo/bar/test/example/8.2.4.0-rp2

我希望:

/foo/bar/test/example/8.2.4.0-rp2
/foo/bar/test/example/8.2.4.0-rp10
/foo/bar/test/example/8.2.4.0-alpha2
/foo/bar/test/example/8.2.4.0-alpha10
/foo/bar/test/example/8.2.4.0-beta-ri2
/foo/bar/test/example/8.2.4.0-beta-ri10
/foo/bar/test/example/8.2.4.0-beta-rs2
/foo/bar/test/example/8.2.4.0-beta-rs10
/foo/bar/test/example/8.2.4.0-RC1
/foo/bar/test/example/8.2.4.0-RC2
/foo/bar/test/example/8.2.4.0-RC10

最佳答案

使用 my answer to your original question 的变体:

./your-script | awk -v keysInOrder='rp,alpha,beta-ri,beta-rs,RC' '
BEGIN {
FS=OFS="-"
keyCount = split(keysInOrder, a, ",")
for (i = 1; i <= keyCount; ++i) keysToOrdinal[a[i]] = i
}
{
sortKey = $2
if (NF == 3) sortKey = sortKey FS $3
sub(/[0-9]+$/, "", sortKey)
auxFieldPrefix = "|" FS
if (NF == 2) auxFieldPrefix = auxFieldPrefix FS
sub(/[0-9]/, auxFieldPrefix "&", $NF)
sortOrdinal = sortKey in keysToOrdinal ? keysToOrdinal[sortKey] : keyCount + 1
print sortOrdinal, $0
}
' | sort -t- -k1,1n -k3,3 -k5,5n | sed 's/^[^-]*-//; s/|-\{1,2\}//'

./your-script 表示生成您要排序的输出的任何命令。

请注意辅助。字符 | 用于促进排序,假设该字符未出现在输入中 - 这应该是合理安全的,因为文件系统路径通常不包含管道字符。

排序键列表中的任何字段 2 值(无数字后缀),使用字母顺序字段 2/3 值后排序在它们之间排序。

关于linux - 对查找命令进行排序以遵守 Unix 中的自定义顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41835799/

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