2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

文字列置換方法の違いによるスピードの比較

Posted at
1 / 2
  • 文字列置換の方法によってどれくらいスピードに違いがあるのか確認してみました。
  • 今回のサンプルは単純な文字列置換ですが、結果はsedコマンドがawkコマンドの70%ほどの時間で完了することがわかりました。
  • bashのwhileの中で置換する方法も2つ確認しましたが、bash変数の文字列置換とsedコマンドを使う方法では750倍以上の差が出ました。

ソースコード

q_01_gorilla.sh
#!/bin/bash

FileFrom="Gorilla.tmp"
FileTo="Gallus.tmp"

StringFrom="Gorilla gorilla"
# StringTo "Gallus gallus"

# 100万行のファイルを準備します
rm -f "${FileFrom}"
for (( i = 0; i < 1000000; i++ )); do
  echo "${StringFrom}" >> "${FileFrom}"
done

# sedコマンドで置換します
echo -e "\n### sed ###"
rm -f "${FileTo}"
cat "${FileFrom}" > /dev/null
time sed 's/orilla/allus/g' "${FileFrom}" > "${FileTo}"
cat -n "${FileTo}" | tail -n 2

# awkコマンドで置換します
echo -e "\n### awk ###"
rm -f "${FileTo}"
cat "${FileFrom}" > /dev/null
time awk '{gsub("orilla","allus",$0) ; print $0}' "${FileFrom}" > "${FileTo}"
cat -n "${FileTo}" | tail -n 2

# whileの中でbashの変数置換機能を使用します
echo -e "\n### bash ###"
rm -f "${FileTo}"
cat "${FileFrom}" > /dev/null
time cat "${FileFrom}" | while read line; do
  StringTo="${line//orilla/allus}"
  echo "${StringTo}"
done > "${FileTo}"
cat -n "${FileTo}" | tail -n 2

# whileの中でsedコマンドで置換します
echo -e "\n### sed-2 ###"
rm -f "${FileTo}"
cat "${FileFrom}" > /dev/null
time cat "${FileFrom}" | while read line; do
  echo "${StringFrom}" | sed 's/orilla/allus/g'
done > "${FileTo}"
cat -n "${FileTo}" | tail -n 2

実行結果

$ ./q_01_gorilla.sh

### sed ###

real	0m0.121s
user	0m0.092s
sys	0m0.012s
 99999	Gallus gallus
100000	Gallus gallus

### awk ###

real	0m0.171s
user	0m0.144s
sys	0m0.004s
 99999	Gallus gallus
100000	Gallus gallus

### bash ###

real	0m2.861s
user	0m2.012s
sys	0m0.724s
 99999	Gallus gallus
100000	Gallus gallus

### sed-2 ###

real	3m4.987s
user	0m6.748s
sys	0m25.956s
 99999	Gallus gallus
100000	Gallus gallus

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?