gpt4 book ai didi

linux - 排序范围 Linux

转载 作者:IT王子 更新时间:2023-10-29 01:14:36 24 4
gpt4 key购买 nike

大家。我有一些关于在 bash 中排序的问题。我正在使用 Ubuntu 14.04。第一个问题是:为什么如果我有包含以下内容的文件 some.txt:

b 8
b 9
a 8
a 9

当我输入这个时:

sort -n -k 2 some.txt 

结果将是:

a 8
b 8
a 9
b 9

这意味着文件首先被排序到第二个字段,然后是第一个字段,但我认为它会保持稳定,即

b 8
a 8
...
...

也许如果两行相等,则应用字典排序或什么?

第二个问题是:为什么以下内容不起作用:

sort -n -k 1,2 try.txt 

文件try.txt是这样的:

8 2
8 11
8 0
8 5
9 2
9 0

第三个问题实际上不是为了排序,但是当我尝试这样做时出现了:

sort blank.txt > blank.txt 

此后 blank.txt 文件为空。这是为什么?

最佳答案

  1. 显然默认情况下 GNU 排序不稳定:添加 -s 选项

    Finally, as a last resort when all keys compare equal, sort compares entire lines as if no ordering options other than --reverse (-r) were specified. The --stable (-s) option disables this last-resort comparison so that lines in which all fields compare equal are left in their original relative order. (https://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html)

  2. 如果您不显示文本文件,则无法回答您的问题

  3. 重定向由 shell before 将控制权交给程序处理。 > 重定向将截断文件(如果存在)。之后,您将给一个空文件 sort

对于 #2,您实际上并没有解释什么不起作用。扩展您的示例数据,会发生这种情况

$ cat try.txt
8 2
8 11
9 2
9 0
11 11
11 2
$ cat try.txt
8 2
8 11
9 2
9 0
11 11
11 2

我假设您想知道为什么第二列没有按数字排序。让我们回到 sed 手册:

‘-n’
‘--numeric-sort’
‘--sort=numeric’

Sort numerically. The number begins each line and consists of ...

看起来使用 -n 只对第一列进行数字排序。经过一些试验和错误后,我发现了这种组合,可以对每一列进行数字排序:

$ sort -k1,1n -k2,2n try.txt 
8 2
8 11
9 0
9 2
11 2
11 11

关于linux - 排序范围 Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25493593/

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