いにしえのCSHを使ってスクリプトを書いてると、不便すぎて色々不都合が出てきます。
当記事はそんないにしえのCSHを使わざるを得ない人々に向けた記事です。
問題提議
CSHでテキストファイルを一行ずつ出してもらうにはどうするか。
普通はこうだ
csh
///textfile.txt の中身
/// AAA BBB CCC
/// DDD EEE FFF
foreach f(`cat textfile.txt`)
echo $f
end
///出力結果
AAA
BBB
CCC
DDD
EEE
FFF
は?おまえあほなん?
イシュー
そう!CSHは空白やタブ、改行で区切って配列化しまうのだ!
もちろん、一行ずつcatを繰り返すことで実現は可能だけど、
デカいテキストを毎回開くのは時間がかかりすぎる
ではどうするか
以下のように実現する
csh
@ tcc = `cat textfile.txt | head -1 | wc -l`
//tcc = textcolumncountの略。
@ tc = `cat textfile.txt | wc -l`
//tc = textcountの略
set text = (`cat textfile.txt`)
foreach f(`seq $tcc $tcc $tc`)
@ s = $f - ($tcc - 1)
echo text[$s-$f]
end
///出力結果
AAA BBB CCC
DDD EEE FFF
ややこしい・・・めんどくさい💢
しかもこれ、先頭一行のスパンが異なると使い物にならないというね…
怒りだ!怒りしかない!
一応、根本解決策はあるらしい
配列にテキストをブチ込んだ時にデミリタ(区切り位置)をどうするかというパラメタがあるらしい。
が、一度試してみたがまともに動かなかったので諦めました。
使える人は使えばいいんじゃないですか。
俺みたいに上記の方法で解決しない人は素直に[
cat "なんかテキストファイル" | head -n $i | tail -1
でやるか、bash使わせてと管理職に泣きつくのがいいんじゃないですかね。
///ITエンジニアとしてはそれが正しい
他になんかいい手段あったら教えてください
ではまたn