パイプを介してgawkでソートする方法は?

パイプを介してgawkでソートする方法は?

オタクな人を分類するのに苦労しています。私は現在以下を持っています:

gawk -f p3a01.awk unsortedNames.txt | sort | gawk -f p3a01.awk

しかし、これは間違った結果をもたらします。次のようなことをすると、gawkが正常に動作しているようです。

gawk -f p3a01.awk unsortedNames.txt | sort > test1.out
gawk -f p3a01.awk test1.out

ソートをgawkに直接パイプする正しい方法があるかどうかはわかりません。私は理想的にすべてを一行にしたいと思います。

スニペットunsortedNames.txt:

Faye King
Lenny R Graph
I M Board
Grey White

p3a01.awk (姓を最初に記載し、残りの名前を記入してください):

BEGIN{}
{
      printf $NF " ";
      $NF="";
      print $0;
}
END{}

p3a02.awk(姓に基づいてソートした後、元の順序でファイルを印刷します):

BEGIN{}
{
     for(i=2;i<=NF;i++){
         printf $i " ";
     }
     print $1;
}
END{}

最終結果(性別に並べ替え):

I M Board
Lenny R Graph
Faye King
Grey White

ベストアンサー1

最適化単一処理牛に似た一種の栄養アッ解決策:

awk 'BEGIN{ PROCINFO["sorted_in"]="@ind_str_asc" }
     { a[$NF]=$0 }END{ for(i in a) print a[i] }' unsortedNames.txt

  • PROCINFO["sorted_in"]="@ind_str_asc"- 配列キー/インデックスに基づいて比較/ソートします。事前定義された配列を事前定義されPROCINFOた値のセットの1つに設定できます。これらの特殊値はここで説明されています(文書)。https://www.gnu.org/software/gawk/manual/gawk.html#Controlling-Scanning

出力:

I M Board
Lenny R Graph
Faye King
Grey White

おすすめ記事