对文件进行数字排序,并在Bash中保留条目之间的空行
我目前正在努力整理数据。我在网上搜索,从来没有看到任何话题提到我的问题 我有无序数据的文件,如:对文件进行数字排序,并在Bash中保留条目之间的空行,bash,sorting,numerical,blank-line,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
blank line
3
blank line
2
在值之间有一个空行。当我使用脚本时,它会有效地对数据进行排序,但空行在顶部,值在底部,如:
blank line
blank line
1
2
3
我希望有如下输出:
1
blank line
2
blank line
3
它保留了输入的结构
我使用的命令是:sort-nk1 filename>newfile
如何保存正确位置的空白行?< /p> < p>删除空行,排序并添加空行:
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/\1\a\r/g;s/\r/\n/g' |
sort -nk1 | sed 's/\a/\n/g' > newfile
tr'\n'\r'新文件
删除空行,重新排序并添加空行:
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/\1\a\r/g;s/\r/\n/g' |
sort -nk1 | sed 's/\a/\n/g' > newfile
tr'\n'\r'新文件
基本上,sort
在独立的行上工作。每条线是分开的。它无法保持您想要的结构。您可以使用Perl之类的程序,使用其I/O将数字和空行作为一个单元读取,然后对这些单元进行排序。但是普通的sort
不能单独完成这项工作。grep。filename | sort-nk1 | sed G
maybe?您可以使用Perl单行程序来完成这项工作:Perl-e'$/=“\n\n”;打印foreach(排序{$a$b});'数据
(其中数据
是包含间隔数据的文件)。我不认为这是不言自明的——这绝对不是事实。但是它相当紧凑。从根本上说,sort
是在独立的行上工作的。每条线是分开的。它无法保持您想要的结构。您可以使用Perl之类的程序,使用其I/O将数字和空行作为一个单元读取,然后对这些单元进行排序。但是普通的sort
不能单独完成这项工作。grep。filename | sort-nk1 | sed G
maybe?您可以使用Perl单行程序来完成这项工作:Perl-e'$/=“\n\n”;打印foreach(排序{$a$b});'数据
(其中数据
是包含间隔数据的文件)。我不认为这是不言自明的——这绝对不是事实。不过它相当紧凑。