本記事の構成および論理分析にはAI(人工知能)を使用しています。情報の正確性は、システム管理者(UNIXユーザー)による手動検証済みです。
第5回 | awk でテキストを表として扱う | 列を見る、条件で絞る、合計する|UNIX Cafe

Unixコマンド実践 | 第5回
CSV やログは、ただの文字列の集まりに見えても、実際には列ごとに意味が分かれていることが多いです。日付、商品名、金額、担当者、というように、見る場所が決まっています。
今回は awk を使って、そうしたデータを「表」として扱う方法を見ていきます。少しプログラムっぽく見えるかもしれませんが、最初は列を見るところから入れば十分です。
ターミナルにまだ慣れていない方は、「1行を何列かに分けて、その何列目を見るかを決める道具」だと思って読むと入りやすいです。この記事では、区切りを決める、列を見る、条件で絞る、合計する、の順に進めます。
📝 この記事で学べること
-Fで区切り文字を決める方法$1$2で列を見る考え方- 条件で絞り込む方法
- 簡単な合計までつなげる流れ
列として見ると整理しやすくなる
たとえば売上メモのようなファイルでも、1行の中に日付、商品名、金額、担当者が並んでいれば、ただの文章というより表に近い見方ができます。
そこで awk を使うと、「何列目を見るか」「どの行だけを見るか」を順番に整理しながら確認できます。まずは練習用の sales.csv を作って、実際に流れを見ていきましょう。
まず vi で、練習用の sales.csv を作ります。
vi sales.csvi を押して入力モードに切り替え、次の5行を入力します。
date,item,price,staff
2026-05-01,coffee,450,sato
2026-05-01,tea,380,tanaka
2026-05-02,cake,520,sato
2026-05-02,coffee,450,yamada入力できたら Esc を押し、:wq で保存して終了します。
:wq中身を確認してみましょう。
cat sales.csvこのファイルでは、1列目が日付、2列目が商品名、3列目が金額、4列目が担当者です。awk では、このような「何列目を見るか」が決まっているデータを扱いやすくなります。
-F と列の見方
awk では、まず -F で区切り文字を決めます。CSV ならカンマです。その上で $1 や $2 のように列を指定して見ていきます。
まずは 2 列目の商品名だけを表示してみます。
awk -F',' '{print $2}' sales.csvこの形では、2列目の商品名だけが表示されます。$1 や $2 は変数ではなく、「1列目」「2列目」という意味で読むと整理しやすいです。
まずは「何列目を見るか」だけに絞ると、awk の入り口がつかみやすくなります。
複数列をまとめて見る
商品名と金額を一緒に見たいときは、必要な列を並べて出せます。
awk -F',' '{print $2, $3}' sales.csvこの形では、2列目の商品名と3列目の金額を並べて表示します。全部の列をそのまま見るより、読みたい情報に意識を向けやすくなります。
条件で絞り込む
担当者が sato の行だけ見たい、といった条件もそのまま書けます。
awk -F',' '$4 == "sato" {print $2, $3}' sales.csvこの形は、「4列目が sato の行だけを選び、その行の 2 列目と 3 列目を表示する」という意味です。条件が入ると難しく見えますが、日本語に言い換えると整理しやすくなります。
簡単な合計までつなげる
awk は条件だけでなく、簡単な集計にもつなげやすいです。たとえば金額の列を足していけば、合計までそのまま出せます。
awk -F',' 'NR > 1 {sum += $3} END {print sum}' sales.csvNR は Number of Records の略で、「現在の行番号」のように考えると分かりやすいです。
NR > 1 は2行目以降を処理するという意味なので、見出し行をそのまま飛ばせます。NR > 2 なら先頭2行、NR > 3 なら先頭3行と、飛ばしたい行数に合わせて数字を変えるだけです。
最後の END {print sum} は、全行を読み終えてから合計を表示する、という意味です。
今回の sales.csv は1行目が見出しなので、ここを飛ばしておかないと price という文字まで計算対象に入ってしまいます。
多くの場合、文字は数値としては
0のように扱われますが、見出し行を計算に入れないことを明示しておく方が安全です。
例えば、次のような場合に注意が必要です。
name,item,2026
Sato,Apple,120
Tanaka,Banana,180この場合、1行目の3列目が 2026 なので、NR > 1 を付けないと、これも合計に入ってしまいます。
2026 + 120 + 180結果はこうなります。
2326本当は 300 が欲しいのに、間違った合計になります。NR > 1 はそれを防ぐための一手です。
つまずきやすい点と保存の一言
awk で初心者が混乱しやすいのは、$1 や $2 が変数ではなく、1列目、2列目を指していることです。ここが分かってくると、見た目ほど難しくありません。まずは print $2 のような単純な形から始めるのが無理のない進め方です。
もう1つのよくあるミスは、区切り文字を指定し忘れることです。CSV なのに -F',' を付けないと、空白区切りとして解釈されて列番号がずれて見えます。「思った列が出ない」ときは、最初に区切りを見直すのが近道です。
結果をファイルへ残したいなら、次のように保存できます。
awk -F',' '$4 == "sato" {print $2, $3}' sales.csv > sato_sales.txtawk は「列を見て、条件を付けて、必要なら集計する」コマンド、-F は「区切り文字」、$1 は「1列目」と短く整理しておくと、読み返したときに迷いにくくなります。
手を動かすミニ練習
ここまでの内容が整理できたら、いま作った sales.csv を使って、少し条件を変えた確認をしてみましょう。
awk -F',' 'NR > 1 {print $1, $2}' sales.csvを実行して、見出しを除いた日付と商品名だけを表示するawk -F',' '$1 == "2026-05-02" {print $2, $3, $4}' sales.csvを実行して、2026-05-02の売上だけを取り出すawk -F',' '$3 >= 500 {print $2, $3}' sales.csvを実行して、500 円以上の商品だけを表示する
この練習では、本文で使った形を少し変えて、「見出しを飛ばす」「日付で選ぶ」「数値の条件で選ぶ」という使い方を確かめられます。
列として見られると確認しやすくなる
CSV やログをただの文字列として見るより、列として見た方が必要な情報へすぐ近づけます。awk は少し強く見えますが、まずは「何列目を見るか」を決めるところから入れば十分使い始められます。
次回予告
次回は、find を使って目的のファイルを正確に探す方法を見ていきます。どこから探すか、何で絞るかを順番に整理していきます。




