ファイルを読む
ファイルを読む:
whileループでreadコマンドを使用すると、bashで任意のファイルを1行ずつ読み取ることができます。‘read_file.sh’という名前のファイルを作成し、次のコードを追加してください。 別途作成する’book.txt’の内容を読み取ります。
「book.txt」ファイルを作成します。
$ vim book.txt
ファイルを読む:
ループを使用すると、bashで任意のファイルを1行ずつ読み取ることができます。
'read_file.sh'という名前のファイルを作成し、次のコードを追加して、'book.txt'という名前の既存のファイルを読み取ります。
#!/bin/bash
file='book.txt';
if [ -f "$file" ];then
while read line;do
echo "$line";
done<$file
else
echo "$file ファイルがありません";
fi
bashコマンドでファイルを実行します。
$ bash read_file.sh
ファイルを読む:
ループを使用すると、bashで任意のファイルを1行ずつ読み取ることができます。
'read_file.sh'という名前のファイルを作成し、次のコードを追加して、'book.txt'という名前の既存のファイルを読み取ります。
具体的に以下のファイルを作成してファイルを読み込み、必要な部分を抜き出して表示してみます。
i-0f6126b7aeedfabd6,hoge
i-050536efdd9dc1126,fuga
i-0869f24358fb3f698,f8k
cat します。
$ cat instance-tag.list
i-0f6126b7aeedfabd6,hoge
i-050536efdd9dc1126,fuga
i-0869f24358fb3f698,f8k
$
以下のソースファイルを作成します。
#!/bin/bash
# catしてwhile read で1行ずつ読み込む
# 「cat instance-tag.list」の結果を1行ずつ「line」
# という変数に代入しています。
cat instance-tag.list | while read line;do
# 二つの変数に値切り出して代入
# $()は()内で指定したコマンドの実行結果を返します。
# 今回の場合、「echo $line | cut -d, -f 1」の実行結果が
# 「instance_id」に定義されます。
instance_id=$(echo $line | cut -d, -f 1)
tag_value=$(echo $line | cut -d, -f 2)
# 表示
echo "instance_id: ${instance_id}";
echo "tag_value: ${tag_value}";
done
bashコマンドでファイルを実行します。
$ bash whileread_example2.sh
instance_id: i-0f6126b7aeedfabd6
tag_value: hoge
instance_id: i-050536efdd9dc1126
tag_value: fuga
instance_id: i-0869f24358fb3f698
tag_value: f8k
$
- ヒント
- cutコマンドの部分は、awkコマンドを使うこともあります。
- 今回は、cutの方が処理速度が速いため、cutコマンドを使いました。
-
ちなみにawkの場合は、以下のように記述します。
instance_id=$(echo $line | awk -F, '{print $1;}');
tag_value=$(echo $line | awk -F, '{print $2;}');