Linux辞書でファイルを水平に並べ替える

Linux辞書でファイルを水平に並べ替える

複数の行と列を持つ以下のファイルがあります。

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入力行は空白のため、デフォルトの配列に分割されます@Fshift @Fゼロ番目の要素を切り取り(ソートから除外)、sort @F残りの要素をデフォルトでアルファベット順に並べ替えます。join " ", ...結果を一緒に連結し、スペース文字で区切ります。

考えるsortデフォルトでは、Perlはユーザーのロケールを無視するので、LC_COLLATE=C無料で取得できます。

おすすめ記事