unix排序忽略标题(通过awk?)但保留选项

时间:2017-09-13 14:46:48

标签: bash sorting unix awk

我想要一个命令sorth(= sorth 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。但我怀疑这种做法很危险。

1 个答案:

答案 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的所有参数。