第5回 | awk でテキストを表として扱う | 列を見る、条件で絞る、合計する|UNIX Cafe

* 当サイトでは、コンテンツの一部に広告を掲載しています。

System Note $ cat /proc/ai-disclosure

本記事の構成および論理分析にはAI(人工知能)を使用しています。情報の正確性は、システム管理者(UNIXユーザー)による手動検証済みです。

第5回 | awk でテキストを表として扱う | 列を見る、条件で絞る、合計する|UNIX Cafe

Unixコマンド実践 | 第5回

CSV やログは、ただの文字列の集まりに見えても、実際には列ごとに意味が分かれていることが多いです。日付、商品名、金額、担当者、というように、見る場所が決まっています。

今回は awk を使って、そうしたデータを「表」として扱う方法を見ていきます。少しプログラムっぽく見えるかもしれませんが、最初は列を見るところから入れば十分です。

ターミナルにまだ慣れていない方は、「1行を何列かに分けて、その何列目を見るかを決める道具」だと思って読むと入りやすいです。この記事では、区切りを決める、列を見る、条件で絞る、合計する、の順に進めます。

📝 この記事で学べること

  • -F で区切り文字を決める方法
  • $1 $2 で列を見る考え方
  • 条件で絞り込む方法
  • 簡単な合計までつなげる流れ
目次

列として見ると整理しやすくなる

たとえば売上メモのようなファイルでも、1行の中に日付、商品名、金額、担当者が並んでいれば、ただの文章というより表に近い見方ができます。

そこで awk を使うと、「何列目を見るか」「どの行だけを見るか」を順番に整理しながら確認できます。まずは練習用の sales.csv を作って、実際に流れを見ていきましょう。

まず vi で、練習用の sales.csv を作ります。

vi sales.csv

i を押して入力モードに切り替え、次の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.csv

NRNumber of Records の略で、「現在の行番号」のように考えると分かりやすいです。

NR > 12行目以降を処理するという意味なので、見出し行をそのまま飛ばせます。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.txt

awk は「列を見て、条件を付けて、必要なら集計する」コマンド、-F は「区切り文字」、$1 は「1列目」と短く整理しておくと、読み返したときに迷いにくくなります。

手を動かすミニ練習

ここまでの内容が整理できたら、いま作った sales.csv を使って、少し条件を変えた確認をしてみましょう。

  1. awk -F',' 'NR > 1 {print $1, $2}' sales.csv を実行して、見出しを除いた日付と商品名だけを表示する
  2. awk -F',' '$1 == "2026-05-02" {print $2, $3, $4}' sales.csv を実行して、2026-05-02 の売上だけを取り出す
  3. awk -F',' '$3 >= 500 {print $2, $3}' sales.csv を実行して、500 円以上の商品だけを表示する

この練習では、本文で使った形を少し変えて、「見出しを飛ばす」「日付で選ぶ」「数値の条件で選ぶ」という使い方を確かめられます。

列として見られると確認しやすくなる

CSV やログをただの文字列として見るより、列として見た方が必要な情報へすぐ近づけます。awk は少し強く見えますが、まずは「何列目を見るか」を決めるところから入れば十分使い始められます。

次回予告

次回は、find を使って目的のファイルを正確に探す方法を見ていきます。どこから探すか、何で絞るかを順番に整理していきます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

のいのアバター のい UNIX Cafe マスター

Macintosh Color Classicから始まった旅は、長いWindows時代を経て、Windows10のサポート終了をきっかけにUNIXの世界へ戻ってきました。UNIX Cafeでは、UNIX・Linux・そしてMacな世界を、むずかしい言葉を使わず、物語のように書いています。プログラミングは、アイデアをコンピューターに伝えるための言葉です。簡単な単語と文法を覚えれば、誰でもコマンドを使えます。ぜひ一度、やさしいプログラミングの世界をのぞいてみてください。

Created by UNIX Cafe

目次