cshにもsplitはあるけど、掲題のような用途ではないですね。
PowershellやVBなんかでよくsplitをこういう使い方しますよね。
cshではこんな風に実現します。
素龍諸ん
例えばよくあるのは、ファイル名から日付データを取り込みたい場合とか。
年月日を取るのに三行もコード書くのバカバカしいですよね。
だからこうします
///対象のファイル名:console.2023.01.01.log
foreach f(`ls`)
set YMD = (`echo $f | awk -F.'{print $2,$3,$4}'`)
set DateSTR = `date -d"$YMD[1]/$YMD[2]/$YMD[3] + 1 days ago" +%Y%m%d`
echo $DateSTR
end
///出力結果
20221231
解説
set YMD = (`echo $f | awk -F.'{print $2,$3,$4}'`)
キモいところから行きますね。
変数に入力するとき、カッコで囲うと配列として代入されます。
配列のデミリタ(区切り文字)は空白かタブか改行なので、
printするものをカンマ区切りにすると空白で区切るので、いい具合に配列化されます。
※つまり、文字列に改行があると、そこで…(こわ)
set DateSTR = `date -d"$YMD[1]/$YMD[2]/$YMD[3] + 1 days ago" +%Y%m%d`
余談だけど使い方の説明になるので一応。
配列なのでインデックスを指定せねばなりません。
cshはなぜか1スタートなので、0はないです。
んで、上記の通り$YMD[1]
こんな風に[]で要素数を入力します。
もっと余談になりますが、要素数を知りたい場合は$#YMD
と入力します。
そして全く関係ないdateコマンドの説明ですが、-d
で出力する日付を指定できます。
んで、大体の場合取得できた日そのままを愚直に欲しい場合ってそんなないので、
前日を取るサンプルにしています。
ちなみに、1ヶ月後の昨日を欲しい場合は
date -d"1 months + 1 days ago"
っすね。これ、なんぼでも繋げるそうです。
無限じゃあないでしょうけども。
ではこんなもんで。さようなら