如何对管道中“猫”发送的输入进行排序以起作用?

时间:2018-07-05 11:00:07

标签: bash

如何像这样解释以下代码(?)那样对cat的输入进行排序:

function sort_input {
output_filename=${1}
# How can I sort the input (What that this function get from `cat`) into `output_filename` ?
}

cat ${1} | sort_input ${1}  # I don't want to change this line!

脚本作为参数获取:文件名。


说明:如何编写sort_input函数,以便该函数可以对cat ${1}发送的输入进行排序[并将排序结果插入到文件output_filename]?

2 个答案:

答案 0 :(得分:1)

您想要的功能非常简单:

sort_input () {
    sort -o "$1"
}

sort将从函数继承其标准输入,因此sort_input foo < foosort -o foo < foo相同。 -o内部涉及一个临时文件,因此即使您使用相同的文件进行输入和输出,它也可以正常工作。

答案 1 :(得分:0)

更多选项:(没有临时文件)
之后,我看到了@PesaThe的答案,我认为我们可以在没有临时文件的情况下做到这一点:

#!/usr/bin/env bash

sort_input() { 
    sort /dev/stdin > "$1"
}

cat "$1" | sort_input "$1"