読者です 読者をやめる 読者になる 読者になる

ゲンゾウ用ポストイット

Java、Groovy、Linux関連の備忘録

readコマンドで読み込んだ行からカラムを取り出す方法

今迄、readコマンドを一行ずつ、行単位で読み込んでくりかえし処理する用途でしか使用していなかった。
ほんのちょっとだけ突っ込んだ使い方を学んだ。

行をカラム分割する

たとえば以下のようなcsvから3列目の情報を取り出す。

1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9

今迄のやり方

cat report.csv | while read line; do
    echo $line | cut -d' ' -f 3
done

以下のようにしたらできることを知った。

cat report.csv | while read -r c1 c2 c3 _; do
    echo $c3
done

変数を列挙したらそこに各列の情報がセットされる。"-r"オプションは、万が一ファイルの行末にバックスラッシュが入っていた場合、改行が無視されてしまうが、無視しないようにするオプション。(なかなか無いケースとは思う)

不要なカラムは"_"という記述をするのが一般的だそうだ。c1、c2の変数は不要なので、以下のように記述できる。

cat report.csv | while read -r _ _ c3 _; do
    echo $c3
done