Skip to content

sedとawk

sedとawkは、テキスト処理に強力なツールです。ログ分析やデータ変換に広く使用されます。

Terminal window
# 文字列の置換
sed 's/old/new/g' file.txt
# ファイルを直接編集(-i: in-place)
sed -i 's/old/new/g' file.txt
# バックアップを作成して編集
sed -i.bak 's/old/new/g' file.txt
# 特定の行を削除
sed '5d' file.txt # 5行目を削除
sed '5,10d' file.txt # 5-10行目を削除
# 特定の行を表示
sed -n '10p' file.txt # 10行目を表示
sed -n '10,20p' file.txt # 10-20行目を表示
Terminal window
# ログファイルからタイムスタンプを削除
sed 's/\[.*\] //' /var/log/app.log
# 空行を削除
sed '/^$/d' file.txt
# コメント行を削除
sed '/^#/d' file.txt
# 複数の置換を実行
sed -e 's/old1/new1/g' -e 's/old2/new2/g' file.txt
# 正規表現を使用
sed 's/[0-9]\+/NUMBER/g' file.txt
Terminal window
# フィールドを表示(デフォルトの区切り文字はスペース)
awk '{print $1}' file.txt # 1番目のフィールド
awk '{print $1, $3}' file.txt # 1番目と3番目のフィールド
# 区切り文字を指定(-F: field separator)
awk -F',' '{print $1}' file.txt
# 条件に合う行を処理
awk '/pattern/ {print $0}' file.txt
# 特定のフィールドで条件分岐
awk '$3 > 100 {print $0}' file.txt
Terminal window
# ログファイルからIPアドレスを抽出
awk '{print $1}' /var/log/nginx/access.log
# ファイルサイズの合計を計算
ls -l | awk '{sum += $5} END {print sum}'
# ユーザーごとのプロセス数をカウント
ps aux | awk '{print $1}' | sort | uniq -c
# CSVファイルの処理
awk -F',' '{print $1, $3}' data.csv
# 条件に合う行を抽出
awk '$2 == "ERROR" {print $0}' /var/log/app.log
Terminal window
# BEGIN/ENDブロック
awk 'BEGIN {print "Start"} {print $0} END {print "End"}' file.txt
# 変数の使用
awk '{sum += $1; count++} END {print "Average:", sum/count}' file.txt
# 配列の使用
awk '{count[$1]++} END {for (i in count) print i, count[i]}' file.txt

sedとawkのポイント:

  • sed: ストリームエディタ、置換、削除、表示
  • awk: テキスト処理言語、フィールド処理、計算、条件分岐
  • 実践例: ログ分析、データ変換、フィールド抽出

適切にsedとawkを使用することで、効率的にテキスト処理ができます。