按数字对文件排序并在 Bash 中保留条目之间的空行

Sort file numerically and preserve blank lines between entries in Bash

我目前正在努力整理数据。我在网上搜索,没有看到任何主题提到我的问题...

我有包含无序数据的文件,例如:

1
blank line
3
blank line
2

值之间有一个空行。当我使用我的脚本时,它有效地对数据进行排序,但空行在顶部,值在底部,例如:

blank line
blank line
1
2
3

我想要这样的输出:

1
blank line
2
blank line
3

保留输入的结构。

我使用的命令是:sort -nk1 filename > newfile

如何在正确的位置保留空行?

删除空行,重新排序并添加空行:

grep . filename | sort -nk1 | sed 's/$/\n/' > newfile

您可以结合使用 grepsed

sort -nk1 filename | sed -n '/./ s/$/\n/p' > newfile

当每行数据后面没有空行时,需要临时添加一些标记

tr '\n' '\r' < filename | 
  sed -r 's/([^\r]+)\r\r/\a\r/g;s/\r/\n/g' | 
  sort -nk1 | sed 's/\a/\n/g' > newfile