AWK入門ガイド


[![Group791.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3967621/e3ff1b2e-e1f9-42eb-b292-151f98cc74e5.png)](https://leapcell.io/)


**[Leapcell: Webホスティング、非同期タスク、Redis向け次世代サーバレスプラットフォーム](https://leapcell.io/)**

# AWK入門ガイド

## I. 基本概念
AWKはLinuxシステムに組み込まれたテキスト処理ツールで、構造化テキスト（ログ、CSVファイルなど）の処理に特化しています。ファイルを1行ずつ読み込み、フィールド単位でデータを処理し、簡単なプログラミングロジックをサポートしています。


## II. 基本構文
### 1. 基本フォーマット
```bash
awk [オプション] 'アクション' ファイル名
```

### 2. 最もシンプルな例
```bash
# ファイル全体の内容を出力する
awk '{print $0}' demo.txt

# パイプを使って標準入力を処理する
echo 'this is a test' | awk '{print $0}'
```

### 3. フィールド処理
- `$1`: 1番目のフィールド
- `$2`: 2番目のフィールド
- `$0`: 全行
- `NF`: 現在の行のフィールド数
- `$NF`: 最後のフィールド

```bash
# 3番目のフィールドを抽出する
echo 'this is a test' | awk '{print $3}'  # 出力: a

# 最後から2番目のフィールドを抽出する
echo 'a,b,c,d' | awk -F ',' '{print $(NF-1)}'  # 出力: c
```


## III. コア機能
### 1. フィールド区切り文字
```bash
# コロンを区切り文字として指定する
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. 条件フィルタリング
```bash
# 正規表現マッチ: "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. 1行条件
```bash
# 奇数行を処理する
awk 'NR % 2 == 1 {print "Line", NR}' file

# フィールド比較
awk -F ':' '$3 > 1000 {print $1}' /etc/passwd
```

### 2. 多行ロジック
```bash
awk -F ':' '{
  if ($1 > "m") {
    print "High:", $1
  } else {
    print "Low:", $1
  }
}' /etc/passwd
```


## VI. 実践的なヒント
- **フォーマット出力**: `print`の代わりに`printf`を使用する
  ```bash
  awk -F ':' '{printf "%-10s %s\n", $1, $3}' /etc/passwd
  ```
- **大容量ファイル処理**: メモリ効率の高い1行ずつ処理
- **ツール連携**: `grep`/`sed`と組み合わせる


## VII. クイックリファレンス
```bash
# よく使うコマンドの組み合わせ
awk -F ':' '/^root/ {print $1}'  # rootで始まる行
awk -F ':' '!/nologin/ {print $1}'  # nologinを含まない行
awk -F ':' '$3 ~ /[0-9]{4}/'  # 4桁の数字を含むフィールド
```


**最適化メモ**:
1. 階層的な見出し構造
2. 変数/関数の表による明瞭化
3. コードブロックと出力結果の対比
4. 実践的なヒントとクイックリファレンスの追加
5. 論理的な順序による学習曲線の向上
6. 適切なスペースとインデントによる読みやすさの向上


# [Leapcell: Webホスティング、非同期タスク、Redis向け次世代サーバレスプラットフォーム](https://leapcell.io/)

最後に、おすすめのデプロイプラットフォームを紹介します：**[Leapcell](https://leapcell.io/)**

[![barndpic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3967621/f4876f23-2a54-488a-a71d-99d28202fada.png)](https://leapcell.io/?lc_t=q_awk)


### 1. 多言語対応
- JavaScript、Python、Go、Rustで開発可能

### 2. 無制限プロジェクトの無料デプロイ
- 使用量課金のみ - リクエストなし＝無料

### 3. 圧倒的なコスト効率
- アイドル時の課金なし
- 例: 平均レスポンス時間60msで694万リクエストに$25

### 4. 開発者向けの洗練された体験
- 直感的なUIによる簡単なセットアップ
- 完全自動化されたCI/CDパイプラインとGitOps連携
- 実行可能な洞察を得るためのリアルタイムメトリクスとログ

### 5. 簡単なスケーラビリティと高性能
- 高い同時処理をサポートする自動スケーリング
- オペレーションの手間なし - 開発に集中できる

[![Frame3-withpadding2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3967621/87011839-dde9-440c-bcca-a1bfb590999e.png)](https://leapcell.io/?lc_t=q_awk)


[ドキュメントを確認！](https://docs.leapcell.io/)

LeapcellのTwitter: [https://x.com/LeapcellHQ](https://x.com/LeapcellHQ)