以数字方式对文件进行排序,并在Bash中的条目之间保留空行

时间:2018-05-20 11:53:13

标签: bash sorting numerical blank-line

我目前正在努力排序数据。我在网上搜索,从未看到任何提及我的问题的主题......

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

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

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

1 个答案:

答案 0 :(得分:3)

删除空行,再次排序并添加空行:

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/\1\a\r/g;s/\r/\n/g' | 
  sort -nk1 | sed 's/\a/\n/g' > newfile