Bash文字列作業速度とパイプ

Bash文字列作業速度とパイプ

md5 チェックサムとファイル名でいっぱいのファイルがあります。各行に対していくつかの処理を実行する必要があるため、次の点に注意してください。

  • チェックサムとは何ですか
  • ファイル名は何ですか

そして適切な措置を講じてください。つまり、チェックサムを変数に入れてからファイル名を入れる必要があります。ファイル名にASCII以外の文字を含めることができますが、改行文字を表示したくありません。次のようになります。

05c00367e8914ca1be0964821d127977  ./.fseventsd/0000000000097aa1
cd9d4291f59a43c0e3d73ff60a337bb5  ./.fseventsd/00000000000fdfec
5d1280769e741e04622cfd852f33a138  ./.fseventsd/0000000000103197
8dda3534e5bbc0be1d15db2809123c50  ./.fseventsd/000000000017c9ca
(...etc., about 100,000 lines)

伝統的には、次のようにすることができます。

md5sum=$(echo $line | awk '{print $1}')
filename=$(echo $line | sed 's/[^ ]*  //')

しかし、これを行うと、どれだけ速くなりますか?

md5sum=${line%%" "*}
filename=${line#*"  "}

ベストアンサー1

はい、bash内部コマンドを使用すると、多くのシステムコールを回避できます。特に再帰がある場合にはさらにそうです。

別の例:$(ls)に*を使用する必要があります。

Bashは、文字列に対して簡単な操作(切り取りと置換)を実行するためのいくつかの方法を提供します。しかし、それはすべてです。それはそれのために設計されていないからです。例:外部コマンドなしで文字列にパターンがあることを確認するのは難しいです。

外部プログラムはそのタスクに最適化されています(cat、sed、grep、awk、cut、sort...)。

おすすめ記事