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

awkとsortの使い方を初心者向けに解説する基本ガイド

updated: 2026/05/16 created: 2026/05/16

はじめに

LinuxやUNIX系環境でテキスト処理を行う際、awkとsortは非常に便利なコマンドです。

awkは列の抽出や条件指定、sortは並び替えを担当し、uniqを組み合わせることで重複削除や件数集計も行えます。

本記事では、awkとsortを使った基本的なテキスト処理から実践的なログ解析まで、初心者が理解しやすい形で整理して解説します。

参考: GNU awk

awkとsortの基本構文と使い方

ファイル作成

cat << 'EOF' > input.txt apple 300 orange 150 banana 200 grape 180 apple 120 EOF

実行コマンド

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

実行結果

apple 300
orange 150
banana 200
grape 180
apple 120

実行コマンド

awk '{ sum += $2 } END { print "total =", sum }' input.txt

実行結果

total = 950

実行コマンド

sort input.txt

実行結果

apple 120
apple 300
banana 200
grape 180
orange 150

実行コマンド

sort -k2 -n input.txt

実行結果

apple 120
orange 150
grape 180
banana 200
apple 300

仕組み

コマンド 仕組み 用途
awk '{ print $1, $2 }' 空白区切りで列を処理 列抽出
awk '{ sum += $2 } END { print sum }' 2列目を加算しENDで出力 合計計算
sort input.txt 文字列順で並び替え 辞書順ソート
sort -k2 -n input.txt 2列目を数値として並び替え 数値ソート

解説

awkは列単位でデータ加工できる強力なテキスト処理コマンドです。

sortはログやCSV風データを条件別に並び替える際によく利用されます。

awk・sort・uniqの役割の違い

ファイル作成

cat << 'EOF' > input.txt apple orange banana apple banana grape orange apple EOF

実行コマンド

awk '{print $1}' input.txt

実行結果

apple
orange
banana
apple
banana
grape
orange
apple

実行コマンド

sort input.txt

実行結果

apple
apple
apple
banana
banana
grape
orange
orange

実行コマンド

sort input.txt | uniq

実行結果

apple
banana
grape
orange

仕組み

コマンド 役割 特徴 主な用途
awk テキスト加工 列単位で処理できる 抽出・集計
sort 並び替え 昇順・降順に整列 データ整理
uniq 重複削除 連続した重複のみ削除 重複チェック

解説

awk はテキストを列ごとに扱えるため、ログ解析やCSV処理でよく利用されます。

sort と uniq を組み合わせることで、重複データの整理を効率的に行えます。

awkとsortを組み合わせる基本パターン

ファイル作成

cat << 'EOF' > input.txt orange 120 apple 80 banana 200 grape 150 melon 90 EOF

実行コマンド

awk '{print $2, $1}' input.txt | sort -n

実行結果

80 apple
90 melon
120 orange
150 grape
200 banana

実行コマンド

awk '{print $2, $1}' input.txt | sort -nr

実行結果

200 banana
150 grape
120 orange
90 melon
80 apple

仕組み

コマンド 役割
awk '{print $2, $1}' 2列目を先頭に並べ替え用データへ変換
sort -n 数値として昇順ソート
sort -nr 数値として降順ソート
| awkの出力をsortへ渡すパイプ処理

解説

awkで列の順番を変更し、sortで並び替えるのが基本パターンです。
数値ソートには -n、降順には -r を組み合わせるのが定番です。

awkとsortで数値・文字列を並び替える方法

ファイル作成

cat << 'EOF' > input.txt orange 15 apple 3 banana 27 grape 9 melon 21 EOF

実行コマンド

awk '{print $2, $1}' input.txt | sort -n

実行結果

3 apple
9 grape
15 orange
21 melon
27 banana

実行コマンド

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

実行結果

apple 3
banana 27
grape 9
melon 21
orange 15

仕組み

コマンド 仕組み
awk '{print $2, $1}' 2列目の数値を先頭に並べ替えて出力
sort -n 数値として昇順ソート
awk '{print $1, $2}' 1列目の文字列をそのまま出力
sort 文字列をアルファベット順でソート

解説

awk は列の入れ替えや抽出に便利で、sort と組み合わせることで柔軟な並び替えができます。
数値ソートは -n、文字列ソートはオプションなしを使うのが基本です。

awkとsortで昇順・降順を切り替える方法

ファイル作成

cat << 'EOF' > input.txt orange 30 apple 10 banana 20 grape 15 EOF

実行コマンド

awk '{print $2, $1}' input.txt | sort -n

実行結果

10 apple
15 grape
20 banana
30 orange

実行コマンド

awk '{print $2, $1}' input.txt | sort -nr

実行結果

30 orange
20 banana
15 grape
10 apple

仕組み

コマンド 役割
awk '{print $2, $1}' 2列目を先頭に並べ替え用データを生成
sort -n 数値として昇順ソート
sort -nr 数値として降順ソート
| awkの出力をsortへ渡す

解説

sort -n は数値の昇順、sort -nr は逆順で降順になります。
awk を組み合わせることで、任意の列を基準に柔軟にソートできます。

awkとsortで列単位にソートする方法

ファイル作成

cat << 'EOF' > input.txt id name score 3 Suzuki 82 1 Tanaka 95 5 Sato 76 2 Yamada 88 4 Kobayashi 91 EOF

実行コマンド

awk 'NR==1{header=$0; next} {print}' input.txt | sort -k1,1n | awk 'BEGIN{print "id name score"} {print}'

実行結果

id name score
1 Tanaka 95
2 Yamada 88
3 Suzuki 82
4 Kobayashi 91
5 Sato 76

実行コマンド

awk 'NR==1{header=$0; next} {print}' input.txt | sort -k3,3nr | awk 'BEGIN{print "id name score"} {print}'

実行結果

id name score
1 Tanaka 95
4 Kobayashi 91
2 Yamada 88
3 Suzuki 82
5 Sato 76

仕組み

コマンド 仕組み
awk 'NR==1{header=$0; next} {print}' ヘッダー行を除外してデータ部分のみ出力
sort -k1,1n 1列目を数値として昇順ソート
sort -k3,3nr 3列目を数値として降順ソート
awk 'BEGIN{print "id name score"}' ソート後にヘッダー行を再表示

解説

awk でヘッダーを除外し、sort で対象列を並び替えることで列単位のソートを実現しています。
sort の n は数値順、r は逆順を意味します。

awkとsortで区切り文字を指定してソートする方法

ファイル作成

cat << 'EOF' > input.txt orange:30 apple:10 banana:20 grape:15 EOF

実行コマンド

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

実行結果

orange 30
apple 10
banana 20
grape 15

実行コマンド

awk -F ':' '{print $1, $2}' input.txt | sort -k2 -n

実行結果

apple 10
grape 15
banana 20
orange 30

仕組み

コマンド 役割
awk -F ':' : を区切り文字として指定
{print $1, $2} 1列目と2列目を出力
sort -k2 -n 2列目を数値として昇順ソート

解説

awk の -F オプションで区切り文字を指定できます。
その出力を sort に渡すことで、任意の列を柔軟にソートできます。

awkとsortでCSVファイルをキー指定でソートする方法

ファイル作成

cat << 'EOF' > input.txt id,name,score 3,Suzuki,82 1,Tanaka,95 2,Sato,88 4,Yamada,70 EOF

実行コマンド

awk -F',' 'NR==1{print;next} {print | "sort -t, -k1,1n"}' input.txt

実行結果

id,name,score
1,Tanaka,95
2,Sato,88
3,Suzuki,82
4,Yamada,70

実行コマンド

awk -F',' 'NR==1{print;next} {print | "sort -t, -k3,3nr"}' input.txt

実行結果

id,name,score
1,Tanaka,95
2,Sato,88
3,Suzuki,82
4,Yamada,70

仕組み

コマンド 役割
awk -F',' CSVの区切り文字を,として処理
NR==1{print;next} ヘッダー行だけ先に表示
sort -t, ,区切りでソート
-k1,1n 1列目を数値昇順でソート
-k3,3nr 3列目を数値降順でソート

解説

awkでヘッダー行を維持しながら、データ部分のみをsortへ渡しています。
CSVの列番号を変更するだけで、任意のキーによる並び替えが可能です。

awkとsortで重複行を削除する方法

ファイル作成

cat << 'EOF' > input.txt apple banana apple orange banana grape EOF

実行コマンド

awk '!seen[$0]++' input.txt

実行結果

apple
banana
orange
grape

実行コマンド

sort -u input.txt

実行結果

apple
banana
grape
orange

仕組み

コマンド 仕組み
awk '!seen[$0]++' input.txt 配列 seen に行を記録し、初回のみ出力する
sort -u input.txt ソート後に重複行を自動で削除する

解説

awk は入力順を維持したまま重複削除できます。

sort -u は並び替えと重複削除を同時に行えるため、大量データ処理で便利です。

awkとsortでユニーク件数を集計する方法

ファイル作成

cat << 'EOF' > input.txt apple red banana yellow apple red orange orange banana yellow apple green EOF

実行コマンド

awk '{print $1}' input.txt | sort | uniq -c

実行結果

      3 apple
      2 banana
      1 orange

実行コマンド

awk '{print $1}' input.txt | sort | uniq | wc -l

実行結果

3

仕組み

コマンド 役割
awk '{print $1}' 1列目だけを抽出
sort 同じ値を並べて集計しやすくする
uniq -c 重複件数をカウント
uniq 重複を除外
wc -l 行数を数えてユニーク件数を表示

解説

awkで必要な列を抽出し、sortで並び替えることでuniqによる重複判定が可能になります。
ログ解析やCSV集計など、シェルでのデータ分析でよく使われる組み合わせです。

awkとsortで集計結果をランキング表示する方法

ファイル作成

cat << 'EOF' > input.txt apple orange apple banana orange apple banana grape orange apple EOF

実行コマンド

awk '{count[$1]++} END {for (word in count) print count[word], word}' input.txt

実行結果

4 apple
2 banana
1 grape
3 orange

実行コマンド

awk '{count[$1]++} END {for (word in count) print count[word], word}' input.txt | sort -nr

実行結果

4 apple
3 orange
2 banana
1 grape

仕組み

コマンド 役割
awk '{count[$1]++}' 1列目の文字列をキーにして件数をカウント
END {for (word in count) ...} 集計結果を最後に出力
sort -nr 数値として降順に並び替え
count[word] awkの連想配列で出現回数を保持

解説

awkでデータを集計し、sortでランキング形式に並び替えることで、ログ解析や頻度調査を簡単に実現できます。特に sort -nr を組み合わせることで、件数順の見やすい集計結果を素早く作成できます。

awkとsortで特定条件の行だけをソートする方法

ファイル作成

cat << 'EOF' > input.txt id,name,score 101,Alice,82 102,Bob,67 103,Charlie,91 104,David,75 105,Eve,88 EOF

実行コマンド

awk -F',' 'NR > 1 && $3 >= 80' input.txt | sort -t',' -k3,3nr

実行結果

103,Charlie,91
105,Eve,88
101,Alice,82

仕組み

処理 内容
awk 1行目のヘッダーを除外しつつ条件一致行を抽出
NR > 1 1行目(id,name,score)を除外
$3 >= 80 3列目(score)が80以上の行のみ対象
sort 抽出した結果を並び替え
-t',' カンマ区切りを指定
-k3,3nr 3列目を数値として降順ソート

解説

NR > 1を追加することでヘッダー行を除外できます。

awkで絞り込み、sortで並び替えるのが定番の組み合わせです。

awkとsortでログ解析する方法

ファイル作成

cat << 'EOF' > input.txt 2026-05-16 10:01:25 INFO userA login 2026-05-16 10:03:11 ERROR userB timeout 2026-05-16 10:04:09 INFO userC upload 2026-05-16 10:05:44 ERROR userA disconnect 2026-05-16 10:06:30 WARN userD retry 2026-05-16 10:07:12 ERROR userC timeout EOF

実行コマンド

awk '$3=="ERROR" {print $4, $5}' input.txt

実行結果

userB timeout
userA disconnect
userC timeout

実行コマンド

awk '$3=="ERROR" {print $4}' input.txt | sort

実行結果

userA
userB
userC

実行コマンド

awk '{count[$3]++} END {for (level in count) print level, count[level]}' input.txt | sort

実行結果

ERROR 3
INFO 2
WARN 1

仕組み

コマンド 仕組み
awk '$3=="ERROR"' 3列目がERRORの行だけ抽出
print $4 4列目のユーザー名を表示
sort 結果を昇順で並び替え
count[$3]++ ログレベルごとの件数を集計
END {for ...} 最後に集計結果を出力

解説

awkは列単位でログを効率よく抽出でき、sortを組み合わせることで集計や整理が簡単になります。
大量ログの解析でも軽量かつ高速に動作するため、サーバー運用でよく利用されます。

awkとsortで日付データを並び替える方法

ファイル作成

cat << 'EOF' > input.txt 2024-12-01 Tokyo 2023-05-10 Osaka 2025-01-15 Nagoya 2022-08-20 Fukuoka EOF

実行コマンド

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

実行結果

2022-08-20 Fukuoka
2023-05-10 Osaka
2024-12-01 Tokyo
2025-01-15 Nagoya

実行コマンド

awk '{print $1, $2}' input.txt | sort -r

実行結果

2025-01-15 Nagoya
2024-12-01 Tokyo
2023-05-10 Osaka
2022-08-20 Fukuoka

仕組み

コマンド 仕組み
awk '{print $1, $2}' input.txt 1列目の日付と2列目の都市名を抽出
sort 日付を昇順で並び替え
sort -r 日付を降順で並び替え

解説

awkで必要な列だけを取り出し、sortで日付順に整列しています。
ISO形式(YYYY-MM-DD)の日付は文字列ソートでも正しい順番になります。

awkとsortでIPアドレスを整理・集計する方法

ファイル作成

cat << 'EOF' > input.txt 192.168.1.10 access 10.0.0.5 access 192.168.1.10 error 172.16.0.1 access 10.0.0.5 access 192.168.1.10 access EOF

実行コマンド

awk '{print $1}' input.txt

実行結果

192.168.1.10
10.0.0.5
192.168.1.10
172.16.0.1
10.0.0.5
192.168.1.10

実行コマンド

awk '{print $1}' input.txt | sort

実行結果

10.0.0.5
10.0.0.5
172.16.0.1
192.168.1.10
192.168.1.10
192.168.1.10

実行コマンド

awk '{print $1}' input.txt | sort | uniq -c

実行結果

      2 10.0.0.5
      1 172.16.0.1
      3 192.168.1.10

仕組み

コマンド 仕組み
awk '{print $1}' 1列目のIPアドレスだけを抽出
sort IPアドレスを昇順で並び替え
uniq -c 重複をまとめて件数を集計

解説

awkで必要な列を取り出し、sortで整列することでuniq -cによる集計が可能になります。
ログ解析やアクセス集計でよく使われる基本的なコマンド連携です。

awkとsortを活用したテキスト処理の基本まとめ

awkとsortは、テキスト処理を効率化する代表的なコマンドです。
awkで必要なデータを抽出し、sortで整列する流れを覚えるだけでも、CSV管理やログ解析が大幅に簡単になります。
まずは小さなサンプルデータでawkとsortを試しながら、少しずつ実践的な使い方に慣れていくことをおすすめします。

コメントを残す

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

©︎ 2025-2026 running terminal commands