cshが詳しい方は教えてください
cshで、ソラリスOS上にtmp.outってのファイルを行ずつに読み込みしたいんですが
foreach f_list("`cat tmp.out`")
echo "${f_list}"
end
tmp.outの内容は以下です。
test3
if ( 0==mencmp("H",HOSTN,10) {
test345
testddd
…
2行目の最後"{"っての文字があれば、実行すると、うまくいけませんが。
『}が足りません。』ってのエラーになっちゃう、
"{"がcsh中で、特殊の文字と思ってますが、cshが詳しいかは対処方法を教えてくれませんか
以上です。よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
> 一応tcshに試しましたが、やっぱりだめでした。
> エラー内容:間違った}です.
おかしいですね?
こちらのtcsh(ver.6.17.00と6.15.00)ではtmp.outと同じ内容が表示されましたが。
tcsh ~.csh
とかやって、ちゃんとtcshで動かしてますか?
対話シェルはtcshにしたけど、1行目が
#!/bin/csh
とかなってるのを
./~.csh
で実行したとか、
csh ~.csh
と実行したとかはないですよね?
# もしかしたら、古いtcshでは同じ現象が起るのかもしれませんが、確認はしていません。
> プログラムの実現の機能としてはファイル(temp.out)を行ごとに読み込み、指定されたキーワードがありましたら、
> その行の内容を別のファイルに出力する機能です。
単純に
grep 'キーワード' tmp.out > t.out
ではだめですか?(キーワードに正規表現の特殊文字が含まれていないとして) awk使うにしても、こんなまわりくどいことしなくても
awk '/キーワード1/{print} /キーワード2/{print} ' tmp.out > t.out
とかできますし。
kmeeさん
いろいろご回答してくれて、誠にありがとうございました
結局、一部の計算機能をやめて、内容だけ、ファイルに出力する方式に修正しました
『grep 'キーワード' tmp.out > t.out』のように修正しました
改めてありがとうございました。
No.3
- 回答日時:
SunOS 5.8のcshで確認しました。
これは、バグといってもいい「仕様」なのでしょうね。
おそらく、"${f_line}"を展開した
echo if ( 0==mencmp("H",HOSTN,10) {
という行全体を eval している気がします。
対処法は次のものしか思いつきませんでした。
・他のシェルを使う
Bsh系にしましょう。
どうしてもCsh系を使いたいなら、せめてtcshを。(すくなくとも、この現象は発生しません)
・根本的にやりかたを見直す
1行ずつなんかの処理をしたいのでしたら、grep,sed,awk,perl、あるいはこれらの組み合わせで大抵のことはできます。
この回答への補足
kmeeさん
詳しくご回答ありがとうございました
現在のところで、Bシェルに変更して、時間が許しませんが
一応tcshに試しましたが、やっぱりだめでした。
エラー内容:間違った}です.
それとも awkで試しましたがやっぱりだめでした。
set i=1
set maxGyo = `awk 'END{print NR}' temp.out`
while ($i <= $maxGyo)
set line = `awk "{ if (NR==$i) print}" temp.out`
echo "$line"
@ i++
end
エラー内容:}が足りません。
プログラムの実現の機能としてはファイル(temp.out)を行ごとに読み込み、指定されたキーワードがありましたら、
その行の内容を別のファイルに出力する機能です。
元々のプログラムは下記のものです。
foreach f_list("`grep -n キーワード temp.out`")
echo "${f_list}" >> t.out
end
何かご存知でしたら、是非お願い申し上げます
kmeeさん
詳しくご回答ありがとうございました
現在のところで、Bシェルに変更して、時間が許しませんが
一応tcshに試しましたが、やっぱりだめでした。
エラー内容:間違った}です.
それとも awkで試しましたがやっぱりだめでした。
set i=1
set maxGyo = `awk 'END{print NR}' temp.out`
while ($i <= $maxGyo)
set line = `awk "{ if (NR==$i) print}" temp.out`
echo "$line"
@ i++
end
エラー内容:}が足りません。
プログラムの実現の機能としてはファイル(temp.out)を行ごとに読み込み、指定されたキーワードがありましたら、
その行の内容を別のファイルに出力する機能です。
元々のプログラムは下記のものです。
foreach f_list("`grep -n キーワード temp.out`")
echo "${f_list}" >> t.out
end
何かご存知でしたら、是非お願い申し上げます
No.1
- 回答日時:
特殊文字なのは{じゃなくて$の方じゃないですか?
つまり2行目を
echo "$${f_list"
としてみたらどうかって事ですが。
この回答への補足
D-Matsuさん
回答ありがとうございました。
試しましたが、やっぱりだめでした
grep.out4中の最後の{を切ると、旨くいきました
やっぱり、ファイル中の{の問題と思ってます。
それで、{の後ろに}を付けて、試して、旨くいきましたが、表示するとき、最後の二つ文字{}が表示できなくなりました。
補足:
いろいろ試しましたが、cat,grepのコマンドの問題ではありません。
問題はバッククォーテーション(``)でcatを囲まれて、旨くいけません
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/06 13:01
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/11 11:05
- その他(プログラミング・Web制作) 単純なコマンドプロンプトが動きません。 2 2022/04/19 15:21
- Perl perlについての質問 2 2022/10/17 15:25
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/01/23 17:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FTPコマンドの戻り値について
-
複数の処理を順番にログアウト...
-
cshの標準出力を制御したい
-
csh(Cシェル)のevalに関して
-
lsコマンドの色設定が反映されない
-
cshで変数名の入れ子ができない
-
実行中のシェルスクリプト自体...
-
シェルスクリプト コマンドを...
-
cygwinシェルスクリプト内での...
-
GNOME端末の起動 及び コマンド...
-
Viで書き込もうとすると、保...
-
/ が何時の間にか「Read-only f...
-
scpコマンドでリモートサーバの...
-
書き込み権限が無いためコピー...
-
コマンドの連続実行とコマンド...
-
rcpコマンドについて、教えて!
-
【ターミナル】MacBookにディー...
-
Red Hat Linux 9でcd-romをマウ...
-
cactiでグラフが表示されない
-
BATファイル実行にフォーカ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンド終了ステータス
-
FTPコマンドの戻り値について
-
cshで変数名の入れ子ができない
-
lsコマンドの色設定が反映されない
-
diskpart でパーティションの一...
-
実行中のシェルスクリプト自体...
-
Mac OSXのターミナルでemacsを起動
-
cronでftp自動転送を行いたい
-
telnet へのパイプができないです
-
cshの標準出力を制御したい
-
複数の処理を順番にログアウト...
-
vagrant upでエラーが表示され...
-
UNIX Cシェルで実数の比較
-
kshでのcase文条件範囲について
-
空白を含んだシェル変数の代入
-
shellから起動したkterm上でコ...
-
PHP4の Warning: pg_freeresul...
-
メニュー画面よりコマンド実行...
-
リモートシェルでファイルをroo...
-
cygwinシェルスクリプト内での...
おすすめ情報