Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对文件进行数字排序,并在Bash中保留条目之间的空行_Bash_Sorting_Numerical_Blank Line - Fatal编程技术网

对文件进行数字排序,并在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});'数据
(其中
数据
是包含间隔数据的文件)。我不认为这是不言自明的——这绝对不是事实。不过它相当紧凑。