Linux - 在保留标题的同时进行排序

Linux - 在保留标题的同时进行排序

关于如何在保留顶部标题的同时对数据进行排序,提出了许多问题。我看到的答案似乎并不那么笼统 - 它们不够灵活,无法支持基于文件和基于流的排序,并且不允许排序选项。

哦,你如何概括这一点?

答案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
    }
' $@

在排序参数实际上可能是一个文件的情况下有点油腻;这个逻辑也许可以加强。总的来说对我来说效果很好..

相关内容