1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【CSH】テキストデータを一行ずつ変数にブチ込む方法

Posted at

いにしえの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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?