按数字对文件排序并在 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
您可以结合使用 grep
和 sed
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
我目前正在努力整理数据。我在网上搜索,没有看到任何主题提到我的问题...
我有包含无序数据的文件,例如:
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
您可以结合使用 grep
和 sed
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