CHAPTER 5 · 8 LESSONS · 104 問

テキストを整形する

並べかえる、重複を消す、列を抜く、置きかえる。文字の流れを加工する道具たち。

前の章で「つなぐ」を覚えた。この章はそのつなぐ相手を増やす回だよ。

コマンドラインの道具は、ほとんどが「テキストを受け取ってテキストを返す」形をしている。だから並べかえる道具と重複を消す道具をつなぐだけで、集計ができてしまう。

  • sort … 並べかえる(数として・列を指定して・逆順に)
  • uniq隣り合った重複を消す(だから先に sort する)
  • cut … 列を抜き出す
  • tr … 文字を置きかえる・消す
  • pastenl … 横に並べる・行番号を振る
  • sed … 行を置きかえる、抜き出す
  • awk … 列を計算する
  • diff … 2つのファイルの違いを出す

sedawk はそれ自体が小さなプログラミング言語で、本を1冊書ける深さがある。この章で扱うのはいちばんよく使う形だけsed は置きかえ、awk は列の取り出しと足し算。それだけで日々の9割は足りるよ。

なお uniq は「同じ行が並んでいるとき」しか消せない。ここを知らないと「効かない」と思ってしまうので、この章でわざと引っかかっておこう。

この章のレッスン

並べかえる、重ねを消す

  1. 20並べかえる(`sort`)sort で行を並べかえる。数として並べる、逆順、列を指定して並べる。 問題へ
  2. 21重なりを消す、数える(`uniq`)uniq で重なった行をまとめる。-c で個数を数える。先に sort が要る理由も知る。 問題へ

抜き出す、置きかえる

  1. 22列を抜き出す(`cut`)cut で行の一部だけを取り出す。区切り文字で列を指定する方法と、その限界を知る。 問題へ
  2. 23文字を置きかえる、消す(`tr`)tr で文字を1対1で置きかえる。-d で消す、-s で重なりを縮める。stdin しか読まない道具。 問題へ
  3. 24横に並べる、行番号を振る(`paste` と `nl`)paste で2つのファイルを横につなぐ。nl と cat -n で行番号を振る。 問題へ
  4. 25文字列を置きかえる(`sed`)sed の s コマンドで文字列を置きかえる。行を選ぶ・消す。-i でファイルを直接書きかえる。 問題へ
  5. 26列を計算する(`awk`)awk で列を取り出し、条件で選び、合計や平均を出す。cut にできなかったことができる道具。 問題へ
  6. 27違いを出す(`diff`)diff で2つのファイルの違いを出す。- と + の読み方、終了ステータスでの使い分け。 問題へ

これがこのコースの最後の章。