複数の行と列を持つ以下のファイルがあります。
a x1.1 x1.2 x1.10 x1.11
ファイルの列を2番目からアルファベット順にソートしたいと思います。したがって、各ラインの出力は次のようになります。
a x1.1 x1.10 x1.11 x1.2
私は使用しましたが、LC_ALL=C sort /path_to_file/file
希望の出力を提供しません。たとえば、複数行の場合
input
a x1.1 x1.2 x1.10 x1.11
b x1.2 x1.3 x1.10 x1.11
a x1.10 x1.20 x1.13 1.12
desired output
a x1.1 x1.10 x1.11 x1.2
b x1.10 x1.11 x1.2 x1.3
a x1.10 x1.12 x1.13 x1.20
getting output
a x1.1 x1.2 x1.10 x1.11
a x1.10 x1.20 x1.13 x1.12
b x1.2 x1.2 x1.10 x1.11
いくつかの解決策を提案してください。
答え1
Perlを使用できます。
$ perl -alpe '$_ = join " ", shift @F, sort @F' input
a x1.1 x1.10 x1.11 x1.2
b x1.10 x1.11 x1.2 x1.3
a x1.10 x1.12 x1.13 x1.20
スクリプトは入力行を繰り返します。-a
入力行は空白のため、デフォルトの配列に分割されます@F
。shift @F
ゼロ番目の要素を切り取り(ソートから除外)、sort @F
残りの要素をデフォルトでアルファベット順に並べ替えます。join " ", ...
結果を一緒に連結し、スペース文字で区切ります。
私考えるsort
デフォルトでは、Perlはユーザーのロケールを無視するので、LC_COLLATE=C
無料で取得できます。