Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2882

bashでテキストファイルを行毎に読み込む

$
0
0

目的

bashでテキストファイルを行毎に読み込む処理を、IFSを利用して実装した際の備忘録です。

IFSとは

【シェルスクリプト】IFSで区切り文字(デリミタ)を変更する方法
環境変数「IFS」(Internal Filed Separator)には、bashの場合「スペース」「タブ」「改行」($' \t\n')といった値が初期設定されていて、これらが文字の区切りとして認識されています。

お試し

まず以下のtest.txtを用意します。

test.txt
banana 100 abc
apple  200 xyz

以下のように読み込もうとすると、

test1.sh
for i in`cat test.txt`;do
    echo$i;done

スペース区切りで出力されます。

$ ./test1.sh
banana
100
abc
apple
200
xyz

改行区切りで出力したい場合は、以下のようにIFSに改行を指定します。

IFS='                                                                                                                                                  
'
for i in `cat test.txt`;
do
    printf '%s\n' "$i";
done
$ ./test2.sh
banana 100 abc
apple  200 xyz

以下のようにreadを利用しても可能。

while read -r line ;
do
    echo "$line";
done < test.txt
$ ./test3.sh
banana 100 abc
apple  200 xyz

備考

他にもっと良い方法があれば教えていただければ幸いです。

参考

IFSに改行のみを指定したい
readするときはIFS=を付けておくとstrictな感じで気持ちが良い
【シェルスクリプト】IFSで区切り文字(デリミタ)を変更する方法


Viewing all articles
Browse latest Browse all 2882

Trending Articles