gpt4 book ai didi

linux - 如何使用 linux 命令排序,同时将 3 行视为 1 个 block 并根据每个 block 的第一行进行排序

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:56:59 26 4
gpt4 key购买 nike

如何使用 linux 命令排序,同时将 3 行视为 1 block 并根据每个 block 的第一行排序?

我知道我可以将 3 行连接成 1 行,然后进行排序。但是文件太大了,我不想生成一个临时文件只是为了排序。

最佳答案

sort文本文件 的行进行排序,其中记录始终由换行符分隔。作为异常(exception),它也支持 \0 作为记录分隔符,但无法更改记录分隔的逻辑

您可以利用上述异常来实现装饰-排序-取消装饰 模式,如下所示:

chunk | sort -z -t'
' -k1 | unchunk

chunk将每三行组合成line1\0line2\0line3\n,让sort -z得到三行chunk作为单个记录,-t'\n' -k1 按记录中的第一个字段排序。 unchunk 只是将所有 \0 改回 \n

用 Perl 表示,chunk 看起来像这样:

perl -pe 'chomp;$_.=($.%3)?"\n":"\0"'

(类似的咒语可以很容易地用 awksed 编写,C 版本不会更长。)

unchunk 只不过是 tr '\0' '\n'。因此完整的排序是:

perl -pe 'chomp;$_.=($.%3)?"\n":"\0"' | sort -z -t'
' -k1 | tr '\0' '\n'

给定的输入文件

b
2nd b line
bla 3rd b line
a
some a line
other a line
x
first x line
other x line

...上述管道产生:

a
some a line
other a line
b
2nd b line
bla 3rd b line
x
first x line
other x line

关于linux - 如何使用 linux 命令排序,同时将 3 行视为 1 个 block 并根据每个 block 的第一行进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16114731/

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