AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题

问题[sort](unix)

Martin Hope
elbarna
Asked: 2025-02-06 07:21:18 +0800 CST

使用不同类型对不同的列进行排序,有效,只有空格才奇怪

  • 5

我有这个文件

1  you
3  me
2  their
4  us

该管道工作正常(它按数字排序第一列,按字母排序第二列)是在此处找到的另一个用户的管道

paste <(awk '{print $1}' file.txt | sort -k1n) <(awk '{print $2}' \
file.txt | gsort -V)

但现在使用带空格的单词

1  "and me"
3  me
2  their
4  us

同样的命令会产生这个

1   me
2   their
3   us
4   "and

如何产生这样的结果?

1   and me
2   their
3   us
4

我尝试过:

  • 删除数字 4

  • 使用“和我”

  • 使用“和我”

但结果不正确

sort
  • 1 个回答
  • 37 Views
Martin Hope
elbarna
Asked: 2024-11-30 04:18:41 +0800 CST

如何正确排序耗费内存的进程?

  • 5

通过此命令行,我可以看到进程和 RAM 使用情况(单位为 MB)

ps aux | awk'{print $6/1024" MB\t\t" $11}'|sort -rn|less

问题在于排序

9.95703 MB      /usr/lib/systemd/systemd-journald
9.89062 MB      /usr/sbin/winbindd
9.76953 MB      /usr/sbin/winbindd
9.69922 MB      php-fpm:
9.69922 MB      php-fpm:
9.69531 MB      php-fpm:
9.69531 MB      php-fpm:
9.69531 MB      php-fpm:
93.4297 MB      db_arc1_FREE
9.31641 MB      winbindd:
9.31641 MB      /usr/sbin/snmpd

如何正确排序才能使输出变成这样?

93.4297 MB      db_arc1_FREE
9.95703 MB      /usr/lib/systemd/systemd-journald
9.89062 MB      /usr/sbin/winbindd
9.76953 MB      /usr/sbin/winbindd
9.69922 MB      php-fpm:
9.69922 MB      php-fpm:
9.69531 MB      php-fpm:
9.69531 MB      php-fpm:
9.69531 MB      php-fpm:
9.31641 MB      winbindd:
9.31641 MB      /usr/sbin/snmpd
sort
  • 1 个回答
  • 20 Views
Martin Hope
cipper
Asked: 2024-07-24 15:17:33 +0800 CST

linux 从点开始对浮点数进行排序

  • 7

我希望该-g标志告诉sort将字段视为浮点数,但是:

cat << EOF | sort -g -k1,2
0 0
0 1.0
0 .5 
0 5.0
EOF

给出

0 0
0 1.0
0 .5 
0 5.0

因此.5不被视为0.5。这是一个已知错误还是什么?

附言:我不是在寻求解决方法,我已经解决了sed

sort
  • 1 个回答
  • 455 Views
Martin Hope
True Soft
Asked: 2024-04-30 16:07:46 +0800 CST

按行对文件进行排序,无论其内容如何

  • 11

我有一个非常大的文件,我想按字母顺序排序。它是一个制表符分隔的文件,但我确实需要确保该文件是按行中的第一个字符开始排序的,无论它是空格还是其他任何字符。

输入文件示例:

2090802 V19 I must be the third in the group 
20908 02    V18 I must be the first in file, as col 1 is another value
2090802 V17 I must be the second in the group 
2090802 V16 I must be the first in the group of 2090802

使用命令sort test.txt > test-s.txt我得到这个输出:

2090802 V16 I must be the first in the group of 2090802
2090802 V17 I must be the second in the group 
20908 02    V18 I must be the first in file, as col 1 is another value
2090802 V19 I must be the third in the group 

排序程序似乎看到第一列具有相同的值(忽略第 3 行中的空格),并使用下一个列(V16、V17、V18 和 V19)对文件进行排序。

但是,我希望该值20908 02被认为是不同的,我的预期结果应该是这样的:

20908 02    V18 I must be the first in file, as col 1 is another value
2090802 V16 I must be the first in the group of 2090802
2090802 V17 I must be the second in the group 
2090802 V19 I must be the third in the group 

我尝试使用-b参数,并-t给出另一个分隔符,但仍然没有得到想要的结果。

如何通过考虑行中的每个字符而不忽略空格来对文件进行排序?

sort
  • 2 个回答
  • 638 Views
Martin Hope
Stéphane Chazelas
Asked: 2024-04-27 14:16:34 +0800 CST

对 JSON 文件中的所有数组进行深度优先排序以获得一致的顺序

  • 8

我正在修订控制系统中以 JSON 格式跟踪某些系统的配置。

不幸的是,该配置是使用某些闭源专有命令检索的,并且输出从一次运行到下一次运行都会发生变化,因为对象和数组中的顺序或多或少是随机的。

一次,它会输出:

{
  "fru": [
    {
      "name": "foo",
      "attr": [
         {"name": "colour", "value": "blue"},
         {"name": "length", "value": 12}
      ]
    },
    {
      "name": "bar",
      "attr": [
         {"name": "colour", "value": "red"},
         {"name": "length", "value": 1}
      ]
    }
  ],
  "tags": ["x", "y"]
}

下一次:

{
  "tags": ["y", "x"],
  "fru": [
    {
      "name": "bar",
      "attr": [
         {"name": "length", "value": 1},
         {"name": "colour", "value": "red"}
      ]
    },
    {
      "name": "foo",
      "attr": [
         {"name": "colour", "value": "blue"},
         {"name": "length", "value": 12}
      ]
    }
  ]
}

这意味着从 PoV 来看git diff,从一次运行到下一次运行,一切都会发生变化,即使它是完全相同的系统。

在所有数组中,顺序无关。对象的属性中的顺序也并不重要。因此,如果我可以对该输出进行后处理,以便对象和数组的属性和成员的顺序一致,我将保证当系统不更改时输出不会更改,并且所看到的更改git diff会更多可能会反映系统的变化。

jq -S通过以下方式让我受益匪浅:

  • 对对象内部的属性进行排序
  • 将单独的对象属性和数组成员放在单独的行上(git diff基于行)。

对于上面的例子,这给了我:

{
  "fru": [
    {
      "attr": [
        {
          "name": "colour",
          "value": "blue"
        },
        {
          "name": "length",
          "value": 12
        }
      ],
      "name": "foo"
    },
    {
      "attr": [
        {
          "name": "colour",
          "value": "red"
        },
        {
          "name": "length",
          "value": 1
        }
      ],
      "name": "bar"
    }
  ],
  "tags": [
    "x",
    "y"
  ]
}

和:

{
  "fru": [
    {
      "attr": [
        {
          "name": "length",
          "value": 1
        },
        {
          "name": "colour",
          "value": "red"
        }
      ],
      "name": "bar"
    },
    {
      "attr": [
        {
          "name": "colour",
          "value": "blue"
        },
        {
          "name": "length",
          "value": 12
        }
      ],
      "name": "foo"
    }
  ],
  "tags": [
    "y",
    "x"
  ]
}

这更好,但还没有实现,因为数组没有排序(可以理解)。

请注意,现实生活中的文件更加复杂,其中包含包含更多数组的其他对象数组的数组......

我的想法是解决这个问题,对所有数组进行排序,从基于值的 JSON 字符串表示形式的最深数组开始,例如.fru[0].attr用{"name": "colour", "value": "blue"}before排序{"name": "length", "value": 12},因为字符串在长度{"name":"colour","value":"blue"}1之前排序,然后数组用before排序,因为(与按字母顺序移动到前面的属性)排序在 之前。.frufoobar{"attr":[..."blue"...attrname{"attr":[..."red"...

我可以通过以下方式获取所有数组的路径(深度优先):

$ jq -c '[paths(arrays)]|reverse' a
[["tags"],["fru",1,"attr"],["fru",0,"attr"],["fru"]]

我可以根据数组成员的 JSON 字符串表示形式对数组进行排序:

jq '.array|=sort_by(tojson)'

但是我如何将两者结合起来将第二个应用于第一个返回的所有数组?

或者是否有更好的方法来后处理 JSON 以使顺序保持一致?

如果jq不是最好的工具,我很乐意考虑perl的JSON模块或 ruby​​/python 等效工具。

sort
  • 1 个回答
  • 52 Views
Martin Hope
superstator
Asked: 2024-01-23 02:56:25 +0800 CST

多级数字路径排序

  • 5

我使用的是 Ubuntu 22,我有一个很大的文件树,其中的名称很烦人,其中包含不同位置的数值。就像是:

./2
./2/9
./2/10
./2/8
./1
./1/2
./1/1
./1/11
./11
./11/page 6
./11/page 05
./11/page 4

我想根据数值对其进行排序,忽略诸如“页面”之类的任何内容,以便我得到:

./1/1
./1/2
./1/11
./2/8
./2/9
./2/10
./11/page 4
./11/page 05
./11/page 6

我已经尝试过sort -n,但即使我只查看一级目录名称,它似乎也没有达到我的预期:

$ find . -mindepth 1 -type d | sort -n
./1
./11
./2

是否有一个方便的花花公子选项“按每个整数(而不是数字)排序”?

sort
  • 2 个回答
  • 28 Views
Martin Hope
motor 30
Asked: 2023-05-11 08:15:08 +0800 CST

按两个数字列排序

  • 5

我正在尝试根据从低到高开始的字符(第 2 列)和位置(第 3 列)对遗传文件进行排序。我的表在大文件中是这样的

SNP CHR BP  A1  A2  effect_allele_frequency BETA    standard_error  P
rs10875231  1   100000012   T   G   0.405   -0.0456807  0.02260471  0.04335677
rs6678176   1   100000827   C   T   0.383   0.02553138  0.02287662  0.2645817
rs78590530  1   100000948   A   G   0.016   0.171376    0.08757958  0.05035017
rs149636485 1   100001060   A   G   0.004   -0.03363731 0.1819208   0.8529224

我想以一种方式订购 CHR(从 1 到 22),该位置也从低到高无视其他列并分别为每个 chr 开始。我试过这个排序命令

sort -t $'\t' -nk3 myfile.tsv | sort -t $'\t' -nk2  > test.txt

它在 chr(第 2 列)而不是位置(第 3 列)中给出顺序。似乎第 1 列会干扰:

SNP CHR BP  A1  A2  effect_allele_frequency BETA    standard_error  P
rs1000033   1   226580387   G   T   0.416   0.02958699  0.02295015  0.1971771
rs1000050   1   162736463   T   C   0.378   0.06136397  0.02293639  0.007468015
rs1000070   1   222359612   C   T   0.381   0.02563547  0.02294139  0.2638107
rs1000073   1   157255396   G   A   0.387   -0.01470793 0.02273634  0.517414
rs1000085   1   66857915    C   G   0.024   -0.03536382 0.07555889  0.6394446
rs1000127   1   63432716    C   T   0.157   0.003052272 0.03045933  0.919875

如何仅按第 2 列然后第 3 列排序?

sort
  • 1 个回答
  • 18 Views
Martin Hope
paropunam
Asked: 2023-01-17 06:58:07 +0800 CST

为什么 `htop` 在 `sort` 命令中将 `$'\t'` 显示为 `?`?

  • 8

我正在运行一个管道命令,其中一个部分如下:

sort -t $'\t'  -T . -k1,1g

当我在监视时,htop我看到了这个:

在此处输入图像描述

这背后的原因是什么?这是否意味着我的命令有误或有问题htop?

sort
  • 2 个回答
  • 500 Views
Martin Hope
HippoMan
Asked: 2022-09-26 16:36:53 +0800 CST

/bin/sort 似乎忽略了其输入中的正斜杠

  • 2

我正在运行 Ubuntu 20.0.4。

考虑以下文件的这些内容(假设文件名为input)...

/zzzzz foo bar
/hij zzz
xyz abc 
/abc 
ijk lmnop
qwer tyuiop 
abc def

如果我运行/bin/sort input,我会得到以下输出......

/abc 
abc def
/hij zzz
ijk lmnop
qwer tyuiop 
xyz abc 
/zzzzz foo bar

如您所见,排序算法完全忽略了前导斜杠。手册页中没有sort任何内容说明正斜杠以任何特殊方式处理。

但是,如果我用字符替换每个正斜杠,$则不会发生这种行为。例如,假设一个名为的文件newinput包含这些值...

$zzzzz foo bar
$hij zzz
xyz abc 
$abc 
ijk lmnop
qwer tyuiop 
abc def

换句话说,除了字符已更改为字符之外,newinput与 相同。当我这样做时,我得到这些结果......input/$/bin/sort newinput

$abc 
$hij zzz
$zzzzz foo bar
abc def
ijk lmnop
qwer tyuiop 
xyz abc 

如您所见,在这种情况下,$确实被视为正常的可排序字符/bin/sort。

那么,这里发生了什么?我如何引起/bin/sort对/角色的关注?

提前感谢您的任何想法和建议。

更新:如果我在 Debian 下执行此操作,则排序工作正常,无论是/和$.

所以,我想知道这种行为是否可能是 Ubuntu 的“功能”。

sort slash
  • 1 个回答
  • 28 Views
Martin Hope
Chap
Asked: 2022-07-10 14:35:47 +0800 CST

如何对具有不同数据类型的多个列使用排序

  • 1

这是我的制表符分隔文件 t.tsv:

$ cat t.tsv
2022/05/05  -258.03
2022/05/07  -18.10
2022/05/09  -10.74
2022/05/09  -132.60
2022/05/12  -18.56
2022/05/12  -20.20
2022/05/17  -11.00
2022/05/17  -112.91
2022/05/17  -51.43
2022/05/17  -64.78
2022/05/18  -13.96
2022/05/18  -13.96
2022/05/18  -7.51
2022/05/19  -17.08
2022/05/20  -33.08

我正在使用 MacOS 12.4 排序(来自手册页:排序实用程序符合 IEEE Std 1003.1-2008 (“POSIX.1”) 规范)首先按 alpha seq 升序按 col 1 排序,然后按数字升序按 col2 排序。

$ cat t.tsv|sort --field-separator='\t' --key=1,1 --key=2,2n
2022/05/05  -258.03
2022/05/07  -18.10
2022/05/09  -10.74
2022/05/09  -132.60
2022/05/12  -18.56
2022/05/12  -20.20
2022/05/17  -11.00
2022/05/17  -112.91
2022/05/17  -51.43
2022/05/17  -64.78
2022/05/18  -13.96
2022/05/18  -13.96
2022/05/18  -7.51
2022/05/19  -17.08
2022/05/20  -33.08

我很困惑为什么当第一列相同时,第二列没有按升序数字顺序排序。许多 SE 对同一问题的回答都说(a)您将单个列指定为--key=1,1,并且(b)您可以将选项-n应用于单个键定义,例如--key=2,2n.

更新:我应该提到我的外壳是bash.

sort numeric-data
  • 1 个回答
  • 49 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve