次の記事 >
Rocky Linux のインストール
[Linux]awk(オーク)の使い方について
公開日:2026-01-14
更新日:2026-01-14
更新日:2026-01-14
1. 概要
awk(オーク)は、テキストの加工や抽出を行うためのスクリプト言語です。
コマンドとして実行する場合は、次のような形式で書きます。
コマンドとして実行する場合は、次のような形式で書きます。
コマンド
awk 'パターン { アクション }' ファイル名
「パターン { アクション } 」が、awkプログラムです。2. 動作確認
2.1 テストデータ
ls -al の実行結果をファイル出力したものを使用します。
コマンド
cd /
ls -al > ~/filelist.txt
cat ~/filelist.txt
実行結果
合計 24
dr-xr-xr-x. 18 root root 235 10月 9 21:45 .
dr-xr-xr-x. 18 root root 235 10月 9 21:45 ..
dr-xr-xr-x. 2 root root 6 10月 29 2024 afs
lrwxrwxrwx. 1 root root 7 10月 29 2024 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 10月 10 08:36 boot
drwxr-xr-x. 20 root root 3280 1月 14 09:18 dev
drwxr-xr-x. 90 root root 8192 1月 14 09:18 etc
drwxr-xr-x. 3 root root 19 10月 9 21:46 home
lrwxrwxrwx. 1 root root 7 10月 29 2024 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 10月 29 2024 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 10月 29 2024 media
drwxr-xr-x. 2 root root 6 10月 29 2024 mnt
drwxr-xr-x. 4 root root 36 10月 13 10:18 opt
dr-xr-xr-x. 188 root root 0 1月 14 09:18 proc
dr-xr-x---. 4 root root 141 10月 20 09:00 root
drwxr-xr-x. 34 root root 960 1月 14 09:19 run
lrwxrwxrwx. 1 root root 8 10月 29 2024 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 10月 29 2024 srv
dr-xr-xr-x. 13 root root 0 1月 14 09:18 sys
drwxrwxrwt. 10 root root 4096 1月 14 14:42 tmp
drwxr-xr-x. 12 root root 144 10月 9 21:45 usr
drwxr-xr-x. 20 root root 4096 10月 9 22:20 var2.2 指定した列の取得
9列目の取得。$1 は 1 列目、$9 は 9列目。$0 は、全ての列を指す。
コマンド
awk '{ print $9 }' ~/filelist.txt
実行結果
.
..
afs
bin
boot
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var2.3 条件で絞り込む
ファイルサイズ( 5 列目)が 1000 バイト以上のファイル名( 9 列目)を出力する。
コマンド
awk '$5 >= 1000 { print $9, $5 }' ~/filelist.txt
実行結果
boot 4096
dev 3280
etc 8192
tmp 4096
var 40962.4 最初と最後に処理を実行する
コマンド
awk 'BEGIN { print "開始" } $5 >= 1000 { print $9, $5 } END { print "終了" }' ~/filelist.txt
実行結果
開始
boot 4096
dev 3280
etc 8192
tmp 4096
var 4096
終了
BEGIN { 処理 } で最初に実行する処理、END { 処理 } で最後に実行する処理を書けます。BEGIN と END は大文字にすること。
絞り込みの条件は、BEGIN の後ろに書きます。
2.5 変数を使う
コマンド
awk -v COUNT=1 '$5 >= 1000 { print COUNT, $9, $5; COUNT++ }' ~/filelist.txt
または
awk 'BEGIN { COUNT=1 } $5 >= 1000 { print COUNT, $9, $5; COUNT++ }' ~/filelist.txt
実行結果
1 boot 4096
2 dev 3280
3 etc 8192
4 tmp 4096
5 var 4096
変数を awk プログラムの外で初期化する場合「-v 変数=値」とします。複数初期化する場合は、「-v 変数=値 -v 変数=値」のように、変数ごとに -v を付けます。
また、BEGIN { } でも初期化できます。
2.6 パイプで値を渡す
echo の出力をスペースで分割して 4 列目を出力する。
1 から 5 の連番を出力
コマンド
echo 'This is a pen.' | awk '{ print $4 }'
実行結果
pen.
1 から 5 の連番を出力
コマンド
seq 1 5 | awk '{ print $0 }'
実行結果
1
2
3
4
52.7 標準出力の値を変数に入れる
コマンド
echo 'Hello' | awk -v S="$(echo 'World')" '{print $0, S }'
実行結果
Hello World
S="$(echo 'World')" は、echo の標準出力の値をその場に展開して、S に代入します。UNIXタイムスタンプ(1970/01/01 からの秒数)を変数に代入します。
コマンド
echo 'UnixTime' | awk -v S=$(date +%s) '{print $0, S }'
実行結果
UnixTime 1768399302
date +%s は、UNIXタイムスタンプを標準出力に出力します。それを $( ) でその場に展開して、S に代入しています。2.8 CSVファイルの作成
MariaDB のテストデータの CSV ファイルを作成します。
説明
int(rand()*20)+1 で 1 から 20 の乱数を生成して変数に設定する。
print で title、status、category をカンマ区切りで出力する。
コマンド
seq 1 100 | awk -v srand_seed="$(date +%s)" '
BEGIN { srand(srand_seed) }
{
title = "記事 " $1
status = int(rand()*20)+1
category = int(rand()*20)+1
print title "," status "," category
}' > articles_data.csv
実行結果
記事 1,13,2
記事 2,18,16
記事 3,16,8
記事 4,16,11
記事 5,6,5
:
:
説明
コマンド
seq 1 100
1 から 10000 の連番を1行ごとに出力して、それを awk に渡す。コマンド
awk -v srand_seed="$(date +%s)" '
変数 srand_seed に、date +%s で出力された UNIXタイムスタンプを代入する。コマンド
BEGIN { srand(srand_seed) }
UNIXタイムスタンプを乱数の種として設定する。コマンド
'{
title = "記事 " $1
status = int(rand()*20)+1
category = int(rand()*20)+1
print title "," status "," category
}'
title = "記事 " $1 の $1 には、seq 1 100 の連番( 1 列目)が入っている。int(rand()*20)+1 で 1 から 20 の乱数を生成して変数に設定する。
print で title、status、category をカンマ区切りで出力する。
コマンド
> articles_data.csv
awk の出力内容を CSV ファイルとして出力する。
次の記事 >
Rocky Linux のインストール

