`sort -t`无法正常使用字符串输入

时间:2017-01-02 06:41:04

标签: bash shell sorting

我想在bash中对一些空格分隔的数字进行排序。但是,以下内容并不起作用:

.BEGIN

输出是:

.BEGIN: mkdir -p $(ODIR)

预期输出为:

sort -dt' ' <<< "3 5 1 4"

据我所知,3 5 1 4选项应该使用它的参数作为分隔符。为什么我的代码没有工作?我知道我可以1 3 4 5 空格到换行符,但我正在处理代码高尔夫的事情,并且希望能够在没有任何其他实用程序的情况下完成它。

编辑:每个人都在通过将空格分成线来回答。 我不想这样做。我已经知道如何使用其他实用程序执行此操作。我特别询问如何使用sort进行此操作,并仅进行排序。如果-t没有分隔输入,那么做什么呢?

3 个答案:

答案 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

如果这不是您希望使用排序的方式,那么您已经通过对问题进行了一些挖掘来回答您自己的问题,如果您之前已经这样做过,那么就可以节省其他人给出答案的时间以及你的。