关于如何在保留顶部标题的同时对数据进行排序,提出了许多问题。我看到的答案似乎并不那么笼统 - 它们不够灵活,无法支持基于文件和基于流的排序,并且不允许排序选项。
哦,你如何概括这一点?
答案1
这对作为标准输入提供的任何内容进行排序:
perl -e 'print scalar <>, sort <>;'
例子:
# echo -e "Heading\n2\n1"|perl -e 'print scalar <>, sort <>;'
Heading
1
2
如果你想对文件进行排序,只需将其输入:
echo -e "Heading\n2\n1" >/tmp/test
</tmp/test perl -e 'print scalar <>, sort <>;'
唯一需要警惕的是尝试就地对文件进行排序。
答案2
这是一个可以解决这个问题的小脚本:
#!/bin/bash
ARGS=()
while (( $# > 0 )) ; do
[[ -f "$1" ]] && break
ARGS+=( "$1" )
shift
done
awk -v SORT_ARGS="${ARGS[*]}" '
( NR == 1 ) {
print
next
}
{
print | "sort " SORT_ARGS
}
' $@
在排序参数实际上可能是一个文件的情况下有点油腻;这个逻辑也许可以加强。总的来说对我来说效果很好..