sedとawk
sedとawk
Section titled “sedとawk”sedとawkは、テキスト処理に強力なツールです。ログ分析やデータ変換に広く使用されます。
sed(ストリームエディタ)
Section titled “sed(ストリームエディタ)”基本的な使い方
Section titled “基本的な使い方”# 文字列の置換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行目を表示# ログファイルからタイムスタンプを削除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.txtawk(テキスト処理言語)
Section titled “awk(テキスト処理言語)”基本的な使い方
Section titled “基本的な使い方”# フィールドを表示(デフォルトの区切り文字はスペース)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# ログファイルから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.logawkの高度な使い方
Section titled “awkの高度な使い方”# 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.txtsedとawkのポイント:
- sed: ストリームエディタ、置換、削除、表示
- awk: テキスト処理言語、フィールド処理、計算、条件分岐
- 実践例: ログ分析、データ変換、フィールド抽出
適切にsedとawkを使用することで、効率的にテキスト処理ができます。