シェルスクリプトでファイルを読み込んで処理する

2021-07-05

シェルスクリプトでファイルを1行ずつ読み込む

シェルスクリプトでファイルの内容を読み込んで、その内容を出力したりする方法を紹介します

ファイルを標準入力へリダイレクトさせて読み込む

 while read lineで、標準入力リダイレクトでファイルを読込みながら 1行ずつ処理する方法です

読み込むファイル(list.txt)内容は以下のような中身です

$ cat list.txt
osaka
kyoto
kobe
nara
siga

while read lineでファイルを読み込んでその内容を出力します。
下記の done < 「ファイル名」で読み込むファイルを指定しています

$ vim test.sh
#!/bin/bash

while read line
do
  echo $line
done < list.txt

# 出力結果
$ sh test.sh 
osaka
kyoto
kobe
nara
siga

ファイルの中身をcat で出力して、パイプで渡す

cat でファイルの内容を出力して、その結果をパイプでつないで「while read line」に渡して、1行ごとにその内容を出力します。
cat 「ファイル名」 | while read line の箇所で読み込むファイル名を指定しています

$ vim test.sh
cat list.txt | while read line
do
  echo $line
done

# 出力結果
$ sh test.sh
osaka
kyoto
kobe
nara
siga

カンマ区切りのCSV等を読み込んで変数して出力する

csvファイル等でカンマ区切りの文字を、変数として1行ずつ読み込んで、その内容を出力する方法です

読み込むをおこなうCSVをファイルの中身は以下のような感じです

$ cat list.csv
osaka,Kinki
tokyo,Kanto

CSVファイルを読み込んで、「cut」コマンドで「,」区切りで変数を取り出して、その内容を出力しています。cutコマンドは以下のような感じの書式となります。今回はカンマ区切りですが、空白なども取り扱うことができます

書式:cut -d '[区切り文字]’ -f [取り出す項目数]

$ vim test.sh
#/bin/bash

cat list.csv | while read line
do
  col1=`echo ${line} | cut -d ',' -f 1`
  col2=`echo ${line} | cut -d ',' -f 2`
  echo "Column1: ${col1} Column2: ${col2}"
done

# 出力結果
$ sh test.sh
Column1: osaka Column2: Kinki
Column1: tokyo Column2: Kanto