Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.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 Linux:GNU排序不按顺序排序_Bash_Sorting_Gnu Sort - Fatal编程技术网

Bash Linux:GNU排序不按顺序排序

Bash Linux:GNU排序不按顺序排序,bash,sorting,gnu-sort,Bash,Sorting,Gnu Sort,标题概括了这一点 $ echo `seq 0 10` `seq 5 15` | sort -n 0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15 为什么这样不行 即使我不使用seq: echo '0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15' | sort -n 0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15 甚至直接挖沟echo:

标题概括了这一点

$ echo `seq 0 10` `seq 5 15` | sort -n
0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15
为什么这样不行

即使我不使用
seq

echo '0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15' | sort -n
0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15
甚至直接挖沟
echo

$ echo '0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15' > numbers
$ sort -n numbers 
0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15
排序(1)
对行进行排序。您必须自己解析以空格分隔的数据:

echo `seq 0 10` `seq 5 15` | tr " " "\n" | sort -n
排序(1)
对行进行排序。您必须自己解析以空格分隔的数据:

echo `seq 0 10` `seq 5 15` | tr " " "\n" | sort -n

您只有一行输入。没有要排序的内容。

您只有一行输入。没有要排序的内容。

因为排序需要换行符:

$ echo `seq 0 10` `seq 5 15` | tr " " "\\n" | sort -n | tr "\\n" " "; echo ""
0 1 2 3 4 5 5 6 6 7 7 8 8 9 9 10 10 11 12 13 14 15
$
(seq 0 10; seq 5 15) | sort -n

因为排序需要换行符:

$ echo `seq 0 10` `seq 5 15` | tr " " "\\n" | sort -n | tr "\\n" " "; echo ""
0 1 2 3 4 5 5 6 6 7 7 8 8 9 9 10 10 11 12 13 14 15
$
(seq 0 10; seq 5 15) | sort -n

您键入的命令将导致一行中的数字序列全部传递给
sort
。那不是你想要的。只需将
seq
的输出直接传递到
sort

$ echo `seq 0 10` `seq 5 15` | tr " " "\\n" | sort -n | tr "\\n" " "; echo ""
0 1 2 3 4 5 5 6 6 7 7 8 8 9 9 10 10 11 12 13 14 15
$
(seq 0 10; seq 5 15) | sort -n
顺便说一下,正如你刚刚发现的,结构

echo `command`

通常不会执行您期望的操作,并且对于您实际期望的操作是多余的:它告诉shell捕获
命令的输出
,并将其传递给
echo
,后者再次将其作为输出生成。只需直接执行命令的输出(除非真的意味着让
echo
处理它,或者展开转义序列,或者将所有内容折叠到一行)。

键入命令时,数字序列将全部传递到一行中的
sort
。那不是你想要的。只需将
seq
的输出直接传递到
sort

$ echo `seq 0 10` `seq 5 15` | tr " " "\\n" | sort -n | tr "\\n" " "; echo ""
0 1 2 3 4 5 5 6 6 7 7 8 8 9 9 10 10 11 12 13 14 15
$
(seq 0 10; seq 5 15) | sort -n
顺便说一下,正如你刚刚发现的,结构

echo `command`

通常不会执行您期望的操作,并且对于您实际期望的操作是多余的:它告诉shell捕获
命令的输出
,并将其传递给
echo
,后者再次将其作为输出生成。只需让命令的输出直接通过即可(除非真的意味着让
echo
处理它,可能是扩展转义序列,或者将所有内容折叠到一行)。

注意,我不能用
seq(1)
(未安装在OS X上)来测试这一点,但这适用于
echo(1)
对我来说很好。请注意,我不能用
seq(1)
(未安装在OS X上)来测试这一点,但这对
echo(1)
对我来说很好。好吧,从技术上讲,有一些东西需要排序,但它简单且快速:-)好吧,从技术上讲,有一些东西需要排序,但它很简单,速度快得让人目瞪口呆:-)“并没有达到你的预期”-实际上它完全达到了我的预期。我只是不记得排序行的
sort
:DI指的是构造的一般用法。例如,您通常不希望将所有文本折叠成一行,也不希望命令的输出解释特殊字符(例如,考虑安全问题)。编辑后添加了“通常”,虽然“不会做你期望的事”-实际上它确实做了我期望它做的事。我只是不记得排序行的
sort
:DI指的是构造的一般用法。例如,您通常不希望将所有文本折叠成一行,也不希望命令的输出解释特殊字符(例如,考虑安全问题)。但编辑后添加了“通常”。