aw
はテキスト処理に強力なツールで、ログ解析や CSV 処理など幅広く使われています。
しかし、実際に使うときに
awk '{print $2}'
のように指定しても 思った通りにフィールド区切りが効かない ことがあります。
本記事では、awk
でフィールド区切りが効かない原因と、その解決方法を解説します。
あわせて読みたい


【コマンド詳細】awkコマンドの使い方とオプションまとめ
awk コマンドとは? awk は、テキスト処理やデータ解析に特化した強力なツールであり、主に次のような操作に使用されます。 カラム(フィールド)ごとのデータ操作 パタ…
目次
1. デフォルトの区切りは「空白(スペース or タブ)」
原因
awk
は標準では「空白類(スペースやタブの連続)」を区切り文字として扱います。
そのため、CSV ファイルのように カンマ区切り のデータを処理すると、意図通りに分割されません。
確認例
echo "name,age,city" | awk '{print $2}'
→ 何も表示されない。
解決方法
-F
オプションでフィールド区切りを明示します。
echo "name,age,city" | awk -F',' '{print $2}'
# 出力: age
2. 区切り文字の指定ミス
原因
- 区切り文字をクォートで囲んでいない
- シェルに解釈される記号をそのまま使っている
例:awk -F|
と書くと、シェルが |
をパイプとして扱ってしまう。
解決方法
区切り文字は必ず シングルクォート で囲みます。
awk -F'|' '{print $1}'
もしタブ区切りなら以下のように書きます。
awk -F't' '{print $1}'
3. 入力データに全角スペースや不可視文字が含まれている
原因
ログファイルや外部から取得した CSV には、全角スペース や 制御文字 が混じっていることがあります。
見た目は同じでも awk が正しく区切れないため、フィールド数がずれます。
確認方法
cat -A
や od -c
で隠し文字を確認します。
cat -A file.txt | head -n 3
解決方法
tr
や sed
で不要な文字を削除してから処理します。
cat file.txt | tr -d 'r' | awk -F',' '{print $2}'
4. ファイルの改行コード問題(LF/CRLF)
原因
Windows 由来のファイルは CRLF(rn) 改行になっており、awk で想定通りにフィールド分割できないことがあります。
確認方法
file data.csv
CRLF
と表示されたら Windows 形式です。
解決方法
UNIX 形式に変換してから awk で処理します。
dos2unix data.csv
あるいは tr
コマンドで変換:
cat data.csv | tr -d 'r' | awk -F',' '{print $2}'
5. まとめ
awk
でフィールド区切りが効かないときは以下をチェックしましょう。
- デフォルトはスペース/タブ区切り →
-F
で明示 - 区切り文字の指定ミス → クォートで囲む
- 全角スペースや不可視文字 →
cat -A
で確認、tr
で除去 - 改行コードの違い →
dos2unix
で変換
正しく区切りを設定すれば、awk
はログ処理や CSV 分析にとても便利に使えます。