linux - 在 Linux shell 中对文本块进行排序?
问题描述
使用 bash 和通常可用的 unix 命令,我如何对文件中的文本“块”进行排序,其中“块”是一组由空行分隔的行?
例如,这两个项目将被颠倒。
item b:
b stuff
item a:
a stuff
解决方案
使用 GNU 工具,您可以对以 NUL ASCII 字符(而不是换行符)结尾的文本块进行排序。
下面的想法是在每个块之后添加 NUL 字符(带gawk
),对结果进行排序(带sort -z
),然后删除该 NUL 字符(带tr
):
gawk -v RS= -v ORS='\n\n\0' 1 input_file.txt \
| sort -z \
| tr -d '\0'
注意:这可能会在文件末尾添加一个空行;您可以使用... | sed '$ d'
(或... | head -n -1
使用 GNU 头)删除它。
推荐阅读
- flutter - 如何在 Flutter 上的 StreamBuilder 之前调用 Future 方法?
- c# - 并非所有代码路径都在我的控制器方法中返回值
- python - 从 .txt 文件中提取文件目录?
- c# - 需要帮助创建将按月显示约会类型计数的报告
- javascript - Request.ServerVariables.Keys 返回空
- svg - 如何使用 groovy 字符串替换或 XML Parser 来编辑 SVG 字符串
- c# - C# 将自动 IP 关联更改为手动 IP 集
- excel - 如何按顺序对多列进行排序并使行合并为相同的值?
- c - 如何设置 SUID 位以授予 root 权限?
- security - AbpAuditlogs 中记录了哪些可疑活动?他们的意图是什么?