パイプラインで複数のtrプロセスを回避するためにtrコマンドを接続することは可能ですか?

パイプラインで複数のtrプロセスを回避するためにtrコマンドを接続することは可能ですか?

複数のtxtファイルがあり、これを小文字、アルファベット順に1行に1語ずつ出力したいと思います。tr次のように、パイプラインで複数のコマンドを使用してこれを実行できます。

tr -d '[:punct:]' <doyle_sherlock_holmes.txt | tr '[:upper:]' '[:lower:]' | tr ' ' '\n'

1回のスキャンで完了できますか?これを行うためにCプログラムを書くこともできますがtrsedまたはを使ってawkこれを行う方法があるようですperl

ベストアンサー1

複数の翻訳を組み合わせることはできますが(ロケール関連セットが重複する複雑な場合を除き)、削除と翻訳を組み合わせることはできません。

<doyle_sherlock_holmes.txt tr -d '[:punct:]' | tr '[:upper:] ' '[:lower:]\n'

より複雑なツールの場合、2 回の呼び出しは 1 回の呼び出しtrより高速になる可能性がありますが、これは入力サイズ、さまざまな文字の割合、ツールの実装trと競合するツール、オペレーティングシステム、コアの数などによって大きく異なります。

おすすめ記事