我想在bash中对一些空格分隔的数字进行排序。但是,以下内容并不起作用:
.BEGIN
输出是:
.BEGIN:
mkdir -p $(ODIR)
预期输出为:
sort -dt' ' <<< "3 5 1 4"
据我所知,3 5 1 4
选项应该使用它的参数作为分隔符。为什么我的代码没有工作?我知道我可以1
3
4
5
空格到换行符,但我正在处理代码高尔夫的事情,并且希望能够在没有任何其他实用程序的情况下完成它。
编辑:每个人都在通过将空格分成线来回答。 我不想这样做。我已经知道如何使用其他实用程序执行此操作。我特别询问如何使用sort进行此操作,并仅进行排序。如果-t没有分隔输入,那么做什么呢?
答案 0 :(得分:2)
使用printf
的流程替换将每个输入数字放在一个单独的行中,否则sort
只能获得一行进行排序:
sort <(printf "%s\n" 3 5 1 4)
1
3
4
5
这样做时-dt ''
不需要。
答案 1 :(得分:0)
在搜索之后,我发现了-t是什么。如果你想按每行的某个部分排序,它用于分隔文件,例如,如果你有
Hello,56
Cat,81
Book,14
Nope,62
你想按数字排序,你会想要-t&#39;&#39;用逗号分隔,然后使用-k选择要排序的部分。它是用于字段分隔,而不是像我想的那样记录分隔。
答案 2 :(得分:0)
由于sort只分隔单行上的字段,因此您别无选择,只能使用sort -dt
将数据导入IFS
,例如此方法:
#!/bin/bash
clear
var="8 3 5 1 4 7 2 9 6"
old_IFS="$IFS"
function main() {
IFS=" "
printf "%s\n" $var | sort -d
}
main
这将给出一个明显的输出:
1
2
3
4
5
6
7
8
9
如果这不是您希望使用排序的方式,那么您已经通过对问题进行了一些挖掘来回答您自己的问题,如果您之前已经这样做过,那么就可以节省其他人给出答案的时间以及你的。