内联字段排序

Chr*_*ris 10 awk text-processing sort

我正在尝试在一行输入中对未知数量的字段进行排序:

输入:

ab bc
bc ab
cd ef bc 
bc cd ef
cd bc ab
ef ab bc cd gh
Run Code Online (Sandbox Code Playgroud)

输出:

ab bc
ab bc
bc cd ef
bc cd ef
ab cb cd
ab bc cd ef gh
Run Code Online (Sandbox Code Playgroud)

我一直在使用类似的东西,awk '{if($2 < $1) print $2,$1;else print}'但似乎它会在两个以上的领域变得混乱。有什么帮助吗?

Bir*_*rei 8

一种使用方式perl

perl -lane 'printf qq[%s\n], join q[ ], sort @F' infile
Run Code Online (Sandbox Code Playgroud)

输出:

ab bc
ab bc
bc cd ef
bc cd ef
ab bc cd
ab bc cd ef gh
Run Code Online (Sandbox Code Playgroud)

  • 由于您使用的是`-l`,所以不需要打印换行符。`print join " ", sort @F` 就足够了。 (2认同)

Bir*_*rei 6

使用 GNU awk 的一种方法:

awk '{ 
    split($0, arr); 
    asort(arr); 
    for (i=1; i<=length(arr); i++) { 
        printf "%s ", arr[i] }; 
        printf RS 
    }
' infile
Run Code Online (Sandbox Code Playgroud)

输出:

ab bc 
ab bc 
bc cd ef 
bc cd ef 
ab bc cd 
ab bc cd ef gh
Run Code Online (Sandbox Code Playgroud)