gpt4 book ai didi

linux - 按 id 排序 unix 文件

转载 作者:太空狗 更新时间:2023-10-29 11:38:47 26 4
gpt4 key购买 nike

我想按 id 列对 unix 文件进行排序,但是当我使用 sort -k4,4 或 -k4,4n 时,我没有得到预期的结果。

感兴趣的列应按如下方式排序:

id1
id2
id3
id4
etc.

相反,当我执行 sort -k4,4 时,它是这样排序的

id1
id10
id100
id1000
id10000
id10001
etc.

我的 unix 版本使用以下排序函数:

sort --help
Usage: sort [OPTION]... [FILE]...
Write sorted concatenation of all FILE(s) to standard output.

Mandatory arguments to long options are mandatory for short options too.
Ordering options:

-b, --ignore-leading-blanks ignore leading blanks
-d, --dictionary-order consider only blanks and alphanumeric characters
-f, --ignore-case fold lower case to upper case characters
-g, --general-numeric-sort compare according to general numerical value
-i, --ignore-nonprinting consider only printable characters
-M, --month-sort compare (unknown) < `JAN' < ... < `DEC'
-n, --numeric-sort compare according to string numerical value
-r, --reverse reverse the result of comparisons

Other options:

-c, --check check whether input is sorted; do not sort
-k, --key=POS1[,POS2] start a key at POS1, end it at POS2 (origin 1)
-m, --merge merge already sorted files; do not sort
-o, --output=FILE write result to FILE instead of standard output
-s, --stable stabilize sort by disabling last-resort comparison
-S, --buffer-size=SIZE use SIZE for main memory buffer
-t, --field-separator=SEP use SEP instead of non-blank to blank transition
-T, --temporary-directory=DIR use DIR for temporaries, not $TMPDIR or /tmp;
multiple options specify multiple directories
-u, --unique with -c, check for strict ordering;
without -c, output only the first of an equal run
-z, --zero-terminated end lines with 0 byte, not newline
--help display this help and exit
--version output version information and exit

最佳答案

使用-V--version-sort 选项进行版本排序

sort -V -k4,4 file.txt

示例:

$ cat file.txt
id5
id3
id100
id1
id10

输出:

$ sort -V file.txt
id1
id3
id5
id10
id100

编辑:

如果您的 sort 实现没有 -V 选项,那么可以使用 sed 来移除 id 因此可以完成数字排序 -n,然后将 id 替换回 sed,如下所示:

sed -E 's/id([0-9]+)/\1/' file.txt | sort -n -k4,4 | sed -E 's/( *)([0-9]+)( *|$)/\1id\2\3/'

注意:此解决方案依赖于数据,只有在 ID 列之前没有发现包含纯数字的列时才有效。

关于linux - 按 id 排序 unix 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13454464/

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