クリップボードにコピーしました!
文字列のawk

awkでfieldとseparatorを理解する実践入門ガイド

updated: 2026/05/05 created: 2026/05/04

はじめに

awkはテキスト処理に特化した強力なコマンドであり、ログ解析やデータ整形の現場で頻繁に利用されます。

特にfield(列)とseparator(区切り文字)の概念を理解することが、awkを使いこなすための最初の壁になります。

初心者がつまずきやすいポイントも多いため、実際の挙動をイメージしながら学ぶことが重要です。

本記事ではawkの基本から応用までを順序立てて解説します。

参考:GNU awk

デフォルトの区切り文字(空白とタブ)の挙動と注意点

ファイル作成

cat << 'EOF' > input.txt apple orange banana cat dog mouse one two three EOF

※タブを入力するにはCtrl+vを押した後にタブキーを押してください

実行コマンド

awk '{print $1, $2, $3}' input.txt

実行結果

apple orange banana
cat dog mouse
one two three

実行コマンド

awk '{print NF}' input.txt

実行結果

3
3
3

実行コマンド

awk '{print "["$2"]"}' input.txt

実行結果

[orange]
[dog]
[two]

仕組み

項目内容
デフォルト区切り空白(スペース)とタブ
連続区切りの扱い連続する空白は1つの区切りとして扱う
フィールド変数$1, $2, $3 ...
フィールド数NF で取得可能
区切りの指定-F オプションで変更可能

解説

awkのデフォルト区切りは空白とタブで、連続した空白は1つとして扱われる点が重要です。そのため見た目のスペース数に関係なく、フィールドは正しく分割されます。

オプション -F を使用した基本のフィールド区切り指定

ファイル作成

cat << 'EOF' > input.txt name,age,city Alice,25,Tokyo Bob,30,Osaka Charlie,35,Nagoya EOF

実行コマンド

awk -F ',' '{print $1, $2}' input.txt

実行結果

name age
Alice 25
Bob 30
Charlie 35

実行コマンド

awk -F ',' 'NR > 1 {print $3}' input.txt

実行結果

Tokyo
Osaka
Nagoya

仕組み

要素内容
awkテキストを行・列で処理するコマンド
-F ','フィールド区切りをカンマに指定
$1, $2, $3それぞれ1列目、2列目、3列目を表す
NR > 11行目(ヘッダー)を除外する条件
{print ...}指定したフィールドを出力する処理

解説

-F オプションを使うことで、区切り文字を柔軟に変更できます。CSVのようなデータ処理で特に重要な基本機能です。

組み込み変数 FS を用いたスクリプト内での区切り文字定義

ファイル作成

cat << 'EOF' > input.txt apple,banana,orange dog,cat,bird EOF

実行コマンド

awk 'BEGIN { FS="," } { print $1, $2 }' input.txt

実行結果

apple banana
dog cat

実行コマンド

awk -F',' '{ print $1, $3 }' input.txt

実行結果

apple orange
dog bird

仕組み

要素内容
FSフィールド区切り文字を定義する組み込み変数
BEGIN入力処理前に一度だけ実行されるブロック
$1, $2区切り後の1列目、2列目のデータ
-Fコマンドラインから区切り文字を指定するオプション

解説

FSを設定することで、awkは行を指定した区切り文字で分割して扱います。BEGIN内または-Fオプションで柔軟に区切り文字を変更できます。

複数の異なる文字(カンマ、タブ、セミコロン等)を同時に区切り文字にする方法

ファイル作成

cat << 'EOF' > input.txt apple,orange;grape banana dog;cat,bird fish EOF

※タブを入力するにはCtrl+vを押した後にタブキーを押してください

実行コマンド

awk -F '[,;\t]' '{print $1, $2, $3, $4}' input.txt

実行結果

apple orange grape banana
dog cat bird fish

仕組み

要素内容
-Fフィールド区切り文字(Field Separator)を指定
[,;\t]正規表現の文字クラス(カンマ・セミコロン・タブを同時指定)
$1, $2...分割された各フィールドを参照
awkテキストをフィールド単位で処理するコマンド

解説

awkでは-Fに正規表現を使うことで複数の区切り文字を同時に扱えます。文字クラス[]を使うのがシンプルで実用的な方法です。

正規表現を利用した柔軟なフィールド分離テクニック

ファイル作成

cat << 'EOF' > input.txt name:John, age=25; city Tokyo name:Alice, age=30; city Osaka name:Bob, age=22; city Nagoya EOF

実行コマンド

awk -F '[:,=; ]+' '{print $2, $4, $6}' input.txt

実行結果

John 25 Tokyo
Alice 30 Osaka
Bob 22 Nagoya

実行コマンド

awk -F '[,;]' '{print $1 "|" $2 "|" $3}' input.txt

実行結果

name:John| age=25| city Tokyo
name:Alice| age=30| city Osaka
name:Bob| age=22| city Nagoya

仕組み

要素内容
-Fフィールド区切り文字を指定
[:,=; ]+「: , = ; スペース」をまとめて区切りとして扱う正規表現
$1, $2 ...分割後のフィールド参照
[ ,; ]カンマとセミコロンで分割
+連続する区切りを1つとして処理

解説

awkは正規表現を区切りに使うことで、複数形式のデータを柔軟に分割できます。複雑なログや混在フォーマットの解析に非常に有効です。

出力時の区切り文字を制御する組み込み変数 OFS の活用

ファイル作成

cat << 'EOF' > input.txt apple orange banana dog cat mouse EOF

実行コマンド

awk '{print $1, $2, $3}' input.txt

実行結果

apple orange banana
dog cat mouse

実行コマンド

awk 'BEGIN {OFS=","} {print $1, $2, $3}' input.txt

実行結果

apple,orange,banana
dog,cat,mouse

実行コマンド

awk 'BEGIN {OFS="\t"} {print $1, $2, $3}' input.txt

実行結果

apple	orange	banana
dog	cat	mouse

仕組み

要素説明
FS入力フィールド区切り文字(デフォルトは空白)
OFS出力フィールド区切り文字(print時に使用)
$1, $2...フィールド(列)参照
BEGIN入力処理前に一度だけ実行されるブロック
printフィールドをOFSで連結して出力

解説

出力時の区切りはOFSで制御され、printで複数フィールドを指定したときに適用されます。
FSと組み合わせることで入力と出力の形式を柔軟に操作できます。

空文字を区切り文字にして1文字ずつ分解・処理する方法

ファイル作成

cat << 'EOF' > input.txt Hello EOF

実行コマンド

awk -v FS="" '{ for(i=1;i<=NF;i++) print $i }' input.txt

実行結果

H
e
l
l
o

仕組み

要素内容
FS=""区切り文字を空文字に設定(1文字ごとに分割)
NFフィールド数(=文字数)
$ii番目の文字
for文1文字ずつループ処理

解説

awkでFS=""を指定すると、各文字がフィールドとして扱われます。これにより1文字単位での処理が簡単に実現できます。

固定長データ(Fixed-width)を扱うための設定

ファイル作成

cat << 'EOF' > input.txt John 25Engineer Alice 30Designer Bob 22Student EOF

実行コマンド

awk '{name=substr($0,1,10); age=substr($0,11,2); job=substr($0,13,9); print name, age, job}' input.txt

実行結果

John       25 Engineer
Alice      30 Designer
Bob        22 Student

実行コマンド

awk '{print $1, $2}' input.txt

実行結果

John 25Engineer
Alice 30Designer
Bob 22Student

仕組み

項目内容
substr($0,1,10)1文字目から10文字分(名前)
substr($0,11,2)11文字目から2文字分(年齢)
substr($0,13,9)13文字目から9文字分(職業)
$0行全体の文字列
通常のawk空白を区切り(field separator)として処理

解説

substrで固定位置を切り出す処理が可能。固定長データは文字位置で扱うのが基本。

システムログから特定の列を抽出・成形する

ファイル作成

cat << 'EOF' > input.txt 2026-05-01 INFO user1 login 2026-05-01 ERROR user2 failed 2026-05-02 INFO user3 logout EOF

実行コマンド

awk '{print $1, $3}' input.txt

実行結果

2026-05-01 user1
2026-05-01 user2
2026-05-02 user3

実行コマンド

awk -F ' ' '{print $2, $4}' input.txt

実行結果

INFO login
ERROR failed
INFO logout

仕組み

要素内容
awkテキスト処理ツール
-Fフィールド区切り文字(field separator)を指定
$1, $2...各列(フィールド)を表す
print指定した列を出力

解説

awkは区切り文字で列を分割し、必要なフィールドだけを抽出できる。
ログ解析では特定列の抽出に非常に有効。

awkでfieldとseparator活用のポイントまとめ

awkを使いこなすためにはfieldとseparatorの理解が不可欠です。

-FやFS、OFSを適切に使い分けることで、データの分割から整形までを柔軟に処理できます。

また正規表現を組み合わせることで、実務レベルの複雑なデータにも対応可能になります。

初心者はまずデフォルトの挙動を理解し、徐々に応用的な書き方へとステップアップしていくことが重要です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

©︎ 2025-2026 running terminal commands