gawkのexampleにあったな。gawk限定だが というかちょっとしたデータベースもどきにCSVは使うけど やっぱりシェルスクリプトでもSQL使った方がいいのか? 別にSQLでなくてもいいけど、SQLiteくらいしか思いつかない
>>952 シェルスクリプトで、ってんなら
cutやawkで使える形式がいいなー
何にしろcsvよりは空白区切りでやると思う
csvならexcelに食わせろよ。色々と捗るぞ。
中級者シェラーによくある無駄 (1)空文字列の代入に無駄なクォート HOGE="" → HOGE= だけで桶 (2)変数展開等がないのにダブルクォート HOGE="hage boke" → HOGE='hage boke' シングルクォートで桶 (3)変数の条件展開等がないのにブレース hoge "${var}" → hoge "$var" で桶
シエラって何かあったよな? なんだっけ、ブラウザだったかな……。
>>952 CSVなら他のスクリプト言語使う。
大抵読み込みライブラリあるから。
>>955 (3) は、もしかして
hoge "${var}boo"
と後で変更するかもと考えると悪くないと思う。
>>958 そう変更するなら
hoge "${var}"boo
とするべきで、だったら
hoge "$var"boo
とした方がいいので、やはり { } は無駄。
diff -q ${var}{_old,} || ... とかふつうに { } 使わない? で、こういうとこだけ { } 使ってるのやだから、全部 ${var} にしとこ、とか? まあ、元のスクリプトの使い方が単純なケースだから、{ } 不要じゃねと言われればそれまでだけど
無駄とかそういう理由で省略するもんじゃないから。
>>960 それは
diff -q "$var"{_old,} || ...
だな。${var}だと、varの中身にスペースがあった時に誤動作するから。
{}が要る場所とか要らない場所とか考えるの面倒だから俺は全部省略せずに${hoo} って書くことにしてる ${hoo}って変数名を${bar}に一括置換したくなった時にも便利だしね。
>>963 だったら全部 "$hoo" って書けば良い。タイプ数は同じ。
"$hoo" って変数名を "$bar" に一括置換するのも同じこと。
問題なのは、${hoo} って書いて、それがスペースを含んでいた場合に誤動作する
ということを知らないで書いている人。
{ } で囲んでもスペース問題は解決しない。
。囲む時はダブルクォートを徹底すること。
なんでそんなに${hoo}の表記法を憎むのか理解出来ない。 もしかしてソースに${hoo}って書いたせいで親が殺されたり恋人に振られたりした経験でもあるのか?
966 :
948 :2011/12/10(土) 16:28:58.88
>>955 中級者に格上げありがとう。
正直 EXEC_OPTS="" 自体も要らないんだけど、Excel マクロとかも使ってて
クセになってるんですよね。気をつけます。
TARGET の中身に入れてる内容がどういう意味なのか説明していただけると、
とてもうれしいです。初心者を自覚してたのでわかりません…
>>967 ありがとう。
TARGET=${TARGET:-"/var/tmp/test"}
TARGET の中で、未定義の $TARGET が展開されてる理由は
たぶんシェルスクリプト実行前に環境変数へ入れてるんだろうな〜
というのだけは分りました。
俺も${var}はできるだけ使わない派だけど、 {}使ってるスクリプト見ても無駄だから省略しろとは思わない。
>>968 TARGET=${TARGET:-"/var/tmp/test"}
よりも、
: ${TARGET:=/var/tmp/test}
の方がいい。
>>959 boo などが引用符に囲まれてないと、ちょっといやだ。
自分は * や ~ などパターンマッチをしたいときだけ引用符なし、
それ以外は基本引用符で囲むことにしてる。
シェルスクリプトのパイプの受け取り方わかんない(´・ω・`) Path通してコマンド化しようとしてる2つのシェルスクリプトA,B。 例だからNRで1行でできるとかは、なんせんすな A:Gen (file名).dat なんか適当な数字を発生させる B:Ave (file名).dat 平均を求める B: #Average of Time-series #Ave ***.dat line=`wc -l $1 | awk '{print $1}'` ←行数読む awk '{a+=$1/'$line'}END{print a}' $1 ←平均出す たとえばAで発生させた数字列をパイプで Gen (file名).dat | Ave で つないで平均もとめようとするとと空出力。Ave単体だとちゃんと動く。 大規模計算だからできればawk使いたい。おじさんたちたすけて。
何を聞きたいのか全然わからない。一見日本語のようだが日本語と異なる言語のようだ。
>>973 Aveがこの内容だとパイプ受け取れない(´・ω・`)
どうすればいいですか?
awkスレ以前だろ。引数でファイル渡すようにスクリプト書いてるのに それにパイプでデータを渡したいって話だろ?書き直せ
/dev/stdin w
スクリプトの中で標準入力の内容を何度も処理したい場合は、とりあえず cat > $tmpfile しておく。んでもって line=`wc -l < $tmpfile` awk ... $tmpfile とかかしらん。 ファイルも引数に取れるようにするには、最初の部分を cat "$@" > $tmpfile にしておけばいいし
ファイルに出力するのと標準出力に出力するのは別だってのを 理解していないように思えるが? #!/bin/sh # --- GEN.sh version 2.0 --- OF=$1 if [ "$OF" = "" ] ; then OF=rand.txt ; fi echo 10 > $OF echo 20 > $OF echo 30 > $OF echo 40 > $OF echo 100 echo 200 echo 600 exit 0
すまん、重複してしまった... 削除依頼出してきます。
>>979 if [ "$OF" = "" ] ; then OF=rand.txt ; fi
↑
無駄
: ${OF:=rand.txt}
独りよがりもいい加減にしとけ。な。
>>979 if [ "$OF" = "" ] は無駄だな。ifで書くとしても、
せめて if [ -z "$OF" ] だな。
しつこいねぇ。 $ fgrep -1 ' = ""' /usr/bin/xmkmf if [ "$topdir" = "" ]; then args="-DUseInstalled "$configdirspec $ head -n 7 /usr/bin/xmkmf #!/bin/sh # $XFree86: xc/config/util/xmkmf.cpp,v 1.3 2000/11/06 21:57:10 dawes Exp $ # # make a Makefile from an Imakefile from inside or outside the sources # # $Xorg: xmkmf.cpp,v 1.3 2000/08/17 19:41:53 cpqbld Exp $
>>985 Xの付属のシェルスクって無駄な書き方多いよ。
全然参考にならないし、その例挙げても反証にならない。
>>978 のやりかたでできた。
ありがとうございました。
-z って、どっちだっけってわからなくなるんだよね。 だから自分はいつも if [ "$args" = "" ]; then って書くよ。-n もあるしね(-zと-nはどっちがどっちだっけってなる)。
>>988 シェルによっては、
if [ "$arg" = "" ];
という書き方だと argが -f とかの特殊な値だと誤動作するんだよ。
だから、if [ X"$arg" = X ]; みたいなバッドノウハウもあった。
それを避ける意味でも if [ -z "$arg" ] の方が良い。
-z とか -n ってどういう意味なん 毎回覚えられなくて調べるんだけど
zeroとnonzero これが覚えられないなら頭を使う仕事はやめた方がいい。
ああ一番肝心なの調べてなかったのかthx 覚えられないのは普段使わないからだよ
こんな覚えやすいのに…
-s "$var" もあるから紛らわしいんだよね。 その場でちょこっとスクリプト書いてささっと作業済ませたいときにmanとかかったるい
>>993 頭は普段から使うようにした方がいいぞ。
ブロック壊したり、アイテム出したりするのにいつも頭を使っているから、凄く頭はいいと思うんだが なぜか毎回姫を攫われてしまう。何かいいアイデアはない?
>>992 大木金太郎やボボブラジルみたいな使い方もあるしー
君が勝てるかなあ?その頭で。
999 :
名無しさん@お腹いっぱい。 :2011/12/11(日) 16:27:00.77
bash で waf つくるよ
-z って変数が空か入ってるかぢゃ無いのかよ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。