箱の中の自由粒子

政治・経済・世界情勢などを多角的な視点から考察し、正義を貫く誇り高いブログ。

日常の備忘録。だがしかし、見返すことはない。

shell--ファイルから一行ずつ取り出す方法

目的

cshでファイルから一行ずつ取り出して、

処理させたい。

概要

世間ではbashzshが流行しているが、

私は未だにcshを使っている。

cshスクリプトには向いていない。

それでもcshスクリプトを書かざるを得ない。

なぜならそれは分子研の標準シェルに指定されているからである。

今回もファイルから1行ずつ取り出す簡潔な書き方が

わからなくて困ってしまった。

かっこ良いスクリプティング方法がわからなかったので、

結局、headtailで愚直に書いてみることにした。

方法と結果

bashでファイルを一行ずつ読み込む方法

readコマンドを使うことで、

一行ずつ変数に格納することができる。

#! /bin/bsh

FILE="読み込むファイル名"

cat $FILE | while read line
do
  echo "$line"
done

しかし、この洗練されたスクリプトcshに書き直す方法がわからない。

そこで、whileの代わりにforeachを用いて書き直すことを考えた。

#! /bin/csh

set FILE="ファイル名"

foreach line (`cat "$FILE"`)
  echo "$line"
end

unset FILE

これを実行すると、

空白区切りで変数lineに格納されるため、

上手くいかなかった。

#ファイル
abc def
ABC DEF

l
V

abc
def
ABC
DEF

しかたがないので、

headtailを用いて、

原始的にファイルから一行ずつ取り出すことにした。

cshでファイルを一行ずつ読み込む方法

#! /bin/csh

set FILE = "ファイル名"

set locali =  1
set localN = `wc -l $FILE | awk '{print $1}'`
while ( $locali <= $localN ) 
  set line = `head -n $locali  $FILE | tail -n 1`
  echo "$line"
  @ locali = $locali + 1
end
unset locali , localN , line

unset FILE

exit(0)

参考