シェルスクリプトでファイルを読み込んで処理する
Contents
シェルスクリプトでファイルを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
ディスカッション
ピンバック & トラックバック一覧
[…] シェルスクリプトでファイルを1行ずつ読み込む […]