AWK初心者向けガイド
Mar 08, 2025
# programming
Lukas Schneider
DevOps Engineer · Leapcell

簡潔なAWKチュートリアル
I. 基本概念
AWKはLinuxシステムに組み込まれたテキスト処理ツールで、構造化されたテキスト(例:ログ、CSVファイル)の処理に特化しています。ファイルを1行ずつ読み込み、フィールドごとにデータを処理し、簡単なプログラミングロジックをサポートします。
II. 基本的な構文
1. 基本形式
awk [options] 'actions' filename
2. 最も簡単な例
# ファイルの内容全体を出力 awk '{print $0}' demo.txt # パイプを介して標準入力を処理 echo 'this is a test' | awk '{print $0}'
3. フィールドの処理
$1
: 最初のフィールド$2
: 2番目のフィールド$0
: 行全体NF
: 現在の行のフィールドの総数$NF
: 最後のフィールド
# 3番目のフィールドを抽出 echo 'this is a test' | awk '{print $3}' # 出力: a # 最後から2番目のフィールドを抽出 echo 'a,b,c,d' | awk -F ',' '{print $(NF-1)}' # 出力: c
III. コア機能
1. フィールド区切り文字
# コロンを区切り文字として指定 awk -F ':' '{print $1}' /etc/passwd
2. 組み込み変数
変数名 | 説明 | 例 |
---|---|---|
NR | 現在の行番号 | awk '{print NR}' file |
FS | 入力フィールド区切り文字(デフォルトはスペース) | awk -v FS=: '{print $1}' |
OFS | 出力フィールド区切り文字(デフォルトはスペース) | awk -v OFS=, '{print $1,$2}' |
FILENAME | 現在のファイル名 | awk '{print FILENAME}' file |
IV. 高度な操作
1. 条件付きフィルタリング
# 正規表現に一致: 「usr」を含む行を出力 awk -F ':' '/usr/ {print $1}' /etc/passwd # 数値比較: 3行目以降の内容を出力 awk -F ':' 'NR > 3 {print $1}' /etc/passwd # 組み合わせ条件 awk -F ':' '$1 == "root" || $3 > 1000' /etc/passwd
2. 組み込み関数
関数名 | 機能 | 例 |
---|---|---|
toupper() | 大文字に変換 | awk '{print toupper($1)}' |
length() | 文字列の長さ | awk '{print length($1)}' |
substr() | 部分文字列の抽出 | awk '{print substr($1,3,5)}' |
rand() | 乱数を生成 | awk '{print int(rand()*100)}' |
V. 制御文
1. 単一行条件
# 奇数番号の行を処理 awk 'NR % 2 == 1 {print "Line", NR}' file # フィールドの比較 awk -F ':' '$3 > 1000 {print $1}' /etc/passwd
2. 複数行のロジック
awk -F ':' '{ if ($1 > "m") { print "High:", $1 } else { print "Low:", $1 } }' /etc/passwd
VI. 実用的なヒント
- 整形された出力:
print
の代わりにprintf
を使用awk -F ':' '{printf "%-10s %s\n", $1, $3}' /etc/passwd
- 大きなファイル処理: メモリに優しい行ごとの処理
- ツール統合:
grep
/sed
と組み合わせる
VII. クイックリファレンス
# 一般的なコマンドの組み合わせ awk -F ':' '/^root/ {print $1}' # rootで始まる行 awk -F ':' '!/nologin/ {print $1}' # nologinを含む行を除外 awk -F ':' '$3 ~ /[0-9]{4}/' # 4桁のフィールドに一致
最適化の注意点:
- 階層的な見出し構造
- 明確にするための変数/関数テーブル
- コードブロック/出力結果の対比
- 実用的なヒントとクイックリファレンスを追加
- 論理的な順序で学習曲線を強化
- 適切なスペーシングとインデントで可読性を向上
Leapcell:Webホスティング、非同期タスク、およびRedis用の次世代サーバーレスプラットフォーム
最後に、デプロイメントに最適なプラットフォームをお勧めします:Leapcell
1. 多言語サポート
- JavaScript、Python、Go、またはRustで開発。
2. 無制限のプロジェクトを無料でデプロイ
- 使用量に応じてのみ支払い — リクエストも料金も発生しません。
3. 比類のないコスト効率
- アイドル料金なしの従量課金制。
- 例:25ドルで平均応答時間60msで694万リクエストをサポート。
4. 合理化された開発者エクスペリエンス
- 簡単なセットアップのための直感的なUI。
- 完全に自動化されたCI/CDパイプラインとGitOpsの統合。
- 実用的な洞察を得るためのリアルタイムのメトリクスとロギング。
5. 容易なスケーラビリティと高性能
- 高い並行処理を容易に処理するための自動スケーリング。
- 運用上のオーバーヘッドはゼロ — 構築に集中するだけ。
Leapcell Twitter: https://x.com/LeapcellHQ