次の入力と出力を考慮します。
infile | outfile
1 3 5 2 4 | 1 2 3 4 5
2 4 5 | 2 4 5
4 6 2 1 | 1 2 4 6
次のアプローチよりも高速にファイルの各行のエントリをソートする、プログラミング言語を含まないUNIX プログラムの組み合わせ(シェルスクリプト自体以外のもの) はありますか?
while read line; do
tr ' ' '\n' <<< ${line} | sort | tr '\n' ' '
echo ""
done < infile > outfile
つまり、そのための小さなプログラムを作成することはできますが、通常のワンライナーを使用して魔法のように問題を解決するcpp/python/awk/...
のと同じではありません。
編集:
単に欲しいものを尋ねるのではなく、テキストを追加しすぎたに違いありません。率直に言って、上記のソリューションと同じくらいのオーバーヘッドなしで、行内のエントリを並べ替えることができる UNIX プログラム/プログラムの組み合わせ (パイプ、fors、whiles などを使用)があるかどうかを確認したかったのです。
perl、awk、python などのプログラミング言語で厄介な仕事をする可能性があることはわかっていますが、実際には、これらの言語インタープリターを使用しない UNIX プログラムの構成を探していました。答えから、そのようなツールはないと結論付けなければなりませんinline sort
。私が得た解決策、主に非常にきちんとした Perl ワンライナーに非常に感謝しています。
それでも、私が投稿した Bash アプローチでこれほど多くのオーバーヘッドが発生する理由はよくわかりません。これは本当に多数のコンテキスト スイッチが原因なのか、それとも入力を前後に変換して並べ替えるだけのオーバーヘッドなのか?
これらのステップのどれが実行を非常に遅くしているのか理解できないようです。約 50 万行のファイル内のエントリを並べ替えるには数分かかり、各行には約 30 の値があります。