我想要一个命令sorth
(= sort
和h
eader),就像带有所有命令行选项的unix sort
命令一样,但也能够避免标题。我尝试了以下方法:
sorth
(尝试1):
#!/opt/local/bin/bash
head -n 1 $1 && $1 -n +2 table | sort
这个问题是1)我不知道如何区分目标文件$1
和第二行末尾的sort命令中的任何选项,以及(2)它在你进入sort命令之前,两次访问文件似乎效率低下。
然后我尝试(使用this,修改@ Dave的答案以允许命令行选项)
sorth
(尝试2):
#!/opt/local/bin/bash
gawk -v options="$1" '
BEGIN {FS=",";OFS=","}
NR==1 {print;next}
{print| "sort $options" }'
但这也不起作用,可能也是因为我没有区分sort
选项和目标文件。
我希望命令可灵活使用目标文件或管道STDIN。
我该怎么做?
更酷的是在现有--retain-headers
命令下包含新选项sort
。但我怀疑这种做法很危险。
答案 0 :(得分:1)
GNU awk(gawk)有一个sort
函数(POSIX awk没有),但我不确定你是否想要它。
这是一个小巧,简单,便携的解决方案:
#!/bin/sh
read header
echo "$header"
sort "$@"
这需要通过管道传输或导入。参数仅传递给sort
命令行实用程序。这可以让你做到。
sorth -r < myfile
df -k | sorth -rnk4
这也可以在命令行上完成。重复这些例子,我们有:
{ read h; echo "$h"; sort -r } < myfile
df -k | { read h; echo "$h"; sort -rnk4 }
我还编写了一个名为sortn的脚本,它可以接受参数和标题的任意行数。它接受来自GNU sort的所有参数。