シェルスクリプト総合 その13
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001名無しさん@お腹いっぱい。
2008/10/16(木) 00:48:38スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずは注意点、リンク、地鎮祭など(>>1-6くらい)をご覧ください。
□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
Linuxユーザは/bin/shの正体がbashなので特に注意。
・csh/tcshのシェルスクリプトは推奨されません。
(理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
manや参考リンクを見ましょう。
aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルスクリプトのことをシェルってゆーな
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
RubyやPerlの方が適した仕事には素直にそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
前スレ
シェルスクリプト総合 その12
http://pc11.2ch.net/test/read.cgi/unix/1218277263/
0881名無しさん@お腹いっぱい。
2009/01/21(水) 06:40:16bash限定なら、
#!/bin/bash
echo -n 'コマンド? '
read comm
md5sum `type -p $comm`
0882名無しさん@お腹いっぱい。
2009/01/21(水) 07:53:05ありがとうございました。できました。
>>875
質問をちゃんと読んでください。
0883名無しさん@お腹いっぱい。
2009/01/21(水) 08:12:30>p10とか2桁とかならない範囲なら
なに、この素人
2桁でもできる方法もかけないならプロじゃない。
と素人のおれがいってみる。
0884名無しさん@お腹いっぱい。
2009/01/21(水) 10:03:340885名無しさん@お腹いっぱい。
2009/01/21(水) 10:12:462000年問題とは話が違う。
FreeBSD 5.xはもうEOLになるし、
そもそもシェルスクリプトというのはその場で動けばいいものを
「書き捨て」で書くもの。
0886名無しさん@お腹いっぱい。
2009/01/21(水) 10:13:42後は捏ねくり回したい人たちでどぞー↓
0887名無しさん@お腹いっぱい。
2009/01/21(水) 10:17:22たとえが悪過ぎ。
ちなみに、2000年問題は、騒がれていたほどの問題は起きず。
ほとんど無害で2000年を迎えた経過した。
2000年問題対策でかかった費用は実は必要なかったことが後でわかった。
むしろ、2000年問題対策と称して儲ける業者がいたことの方が問題。
0888名無しさん@お腹いっぱい。
2009/01/21(水) 10:17:520889名無しさん@お腹いっぱい。
2009/01/21(水) 10:19:33あの騒ぎ自体を「2000年問題」と言っている。
0890名無しさん@お腹いっぱい。
2009/01/21(水) 10:19:56メモは残してはいけない。
変にメモを残して別の担当者に引き継がれると困る。
自分が辞めたらだれもやりかたがわからなくなるのが望ましい。
だから会社は自分を辞めさせられない。
0891名無しさん@お腹いっぱい。
2009/01/21(水) 10:54:160892名無しさん@お腹いっぱい。
2009/01/21(水) 11:11:01それ、昔の考え。
0893名無しさん@お腹いっぱい。
2009/01/21(水) 14:50:43仕事がすべて自分に割り当てられる。
典型的な下っ端ですね。
0894名無しさん@お腹いっぱい。
2009/01/21(水) 16:28:23お答えありがとうございます。そのまま書いて実行してみたのですが
そのようなファイルやディレクトリはありませんと出てしまいました。
なんとかなりませんか?
0895名無しさん@お腹いっぱい。
2009/01/21(水) 16:37:29bashをインストールしていない(/bin/bashがない)のでは?
/bin/bashがないのに #!/bin/bash スクリプトを実行しようとすると、
「そのようなファイルやディレクトリはありません」と出るよ。
0896名無しさん@お腹いっぱい。
2009/01/21(水) 16:41:160897名無しさん@お腹いっぱい。
2009/01/21(水) 18:03:31/bin/bashはあるみたいです。
自分のやりかたが悪いのでしょうか・・・
0898名無しさん@お腹いっぱい。
2009/01/21(水) 18:05:330899名無しさん@お腹いっぱい。
2009/01/21(水) 18:16:41/bin/bash^M というシンボリックリンクを本当に作っておくという方法もあり。
0900名無しさん@お腹いっぱい。
2009/01/21(水) 18:39:25ありがとうございます。教えていただいたのを参考に
組み込んでみたところハッシュ値は取ってくるようになりました。
以下に書いたのが自分で書いてみたものの一部なのですが
取ってくるハッシュ値と実際にターミナル上でみたハッシュ値が
違うのですが、何が原因でしょうか?
シェルスクリプトはlist.lstに書いてあるコマンドを読んで
ハッシュ値をcachというフォルダにコマンド名で保存するというものなのですが
例えばlist.lstにfindと書いておくとこのスクリプトだと
e1b58755ded5d89cd50789f850232111と出るのにターミナル上でmd5sum findすると
4c66ef9549b37df90fb36ebc06f88ef0と出ます。何度もすいません・・・
#!/bin/sh
BUFIFS=$IFS
IFS=
exec 3<list.lst
while read file 0<&3
do
type -p "$file" | md5sum> cach/"$file".txt
echo "$file [ ok ]"
done
exec 3<&-
IFS=$BUFIFS
echo -e "\n"
0901名無しさん@お腹いっぱい。
2009/01/21(水) 18:53:00パイプとコマンド置換を混同してるね
× type -p "$file" | md5sum> cach/"$file".txt
○ md5sum `type -p "$file"` > cach/"$file".txt
0902名無しさん@お腹いっぱい。
2009/01/21(水) 18:57:10ありがとうございます。できました。
パイプとコマンド置換について勉強しなおします。
本当にありがとうございました。
0903名無しさん@お腹いっぱい。
2009/01/21(水) 20:20:03パイプとコマンド置換の違いと言う認識だと、
そもそも全然別物なので、
比較検討再構成的な学習法が成立しない。
ようは、引数と標準入力の違いでしょ。
0904903
2009/01/21(水) 20:24:45hoge
$ echo 'hoge' | echo
$ echo 'hoge' | cat
hoge
$ cat `echo hoge`
cat: hoge: No such file or directory
$
って事でしょ。
0905名無しさん@お腹いっぱい。
2009/01/21(水) 20:54:480906903
2009/01/21(水) 21:00:01type とか md5sum って、
どこのOSの話だ?
/bin/bash とかも、変だぞ。
パイプとかコマンド展開とか標準入力とか以前に、
使用するOSとシェルを間違えていませんか?
0907名無しさん@お腹いっぱい。
2009/01/21(水) 21:03:00おまえ、面白くないからもう書かなくていいよ。
md5sumはともかく、typeコマンド自体は純正シェルにある純正コマンド。
(-pオプションはないけどね)
「コマンド展開」とか間違った用語使わずに、用語も正確に覚えようね。
0908名無しさん@お腹いっぱい。
2009/01/21(水) 21:05:490909名無しさん@お腹いっぱい。
2009/01/21(水) 21:10:31とでも書いて欲しかったのかな?
もちろん、そんなことは知った上で、質問者のレベルを推定し、
質問者に合った回答をするのが上級な回答者。
0910903
2009/01/21(水) 21:25:52>>905
間違った解決は良くない。
#!/bin/sh
md5 `type -p \`cat list.lst\``
コマンド展開は普通に使うだろ、
チルダ展開と
変数展開と同列のレイヤーの処理だ。
0911名無しさん@お腹いっぱい。
2009/01/21(水) 21:29:57どこも間違ってないよ。
>>901 よりも早く回答を出せなかったくせに、
後から何言っても言い訳にしかならない。
あと、typeコマンドも知らなかったというお前の程度がこれで知れた。
× コマンド展開
○ コマンド置換(command substitution)
ちなみにチルダ展開は tilde expansion だから、「展開」でよい。
substitutionとexpansionをちゃんと用語として区別すること。
0912903
2009/01/21(水) 21:36:25ファイル記述子の扱いが二重に無駄。
exec が無駄。while が無駄。
なのにスルーして、手前味噌の話に誘導。
md5sum(そんなコマンド知らんが)の引数と標準入力の
扱いの違いを言及していないで、コマンド展開とパイプの話にすり替えている。
嘘だらけ。
0913名無しさん@お腹いっぱい。
2009/01/21(水) 21:41:330914名無しさん@お腹いっぱい。
2009/01/21(水) 21:41:57「引数と標準入力の違い」という言い方では、質問者には意味が通じにくい。
で、問題が解決した後で、質問者が「引数と標準入力について勉強してみます」
と言ったとしても、「引数と標準入力」では範囲が広過ぎて、
具体的なパイプやコマンド置換の用法の話に直接結び付かない。
こういう場合は、「パイプとコマンド置換の違い」と、単刀直入に説明するのが、
よい解説者。これなら、後で質問者が、パイプやコマンド置換について、
直接調べて勉強することができる。
0915名無しさん@お腹いっぱい。
2009/01/21(水) 21:46:55へ。
>>900 の元のスクリプト、もう一度良く見てみろ。
ファイル毎に別々のファイルにmd5を出力してるんだよ。
そうやって質問してるんだから、別々のファイルへの出力が要求仕様。
それに対し、お前の >>910 の例では、1つのファイルにmd5を書き出すから、
仕様を満たしていない。
whileは無駄ではない。この仕様の場合には必要。
0916名無しさん@お腹いっぱい。
2009/01/21(水) 21:49:070917903
2009/01/21(水) 21:50:49犬もsolも使った事があると言う程度だが、悪いか?
白痴じゃないから、md5sum位はググればすぐに分かるが、
敢えて、/bin/bashという設定に反発しただけで、(typeが勇み足)
真面目にとるな。
>>914
いや、そこが大事。
別に引数と言う概念全般とか標準入力全般やfd0の話ではなく、
あるコマンドが、引数や標準入力をどう扱うかという話しであり、
その方が明らかに調べやすい。
0918903
2009/01/21(水) 21:54:43なら、doneの後ろでリダイレクトで十分。
そうしても尚、無駄は残るがね。
>>916
気をつけた方がいい。
職を失うだけでは済まないかも?
0919名無しさん@お腹いっぱい。
2009/01/21(水) 21:55:27シェルのコマンド置換には行きつかない。
そもそもコマンド置換自体の存在を知らないと、
そういう使い方ができることすらわからない。
だから、「引数と標準入力」じゃなく、「パイプとコマンド置換」と
説明した方がよいことは明らか。
0920名無しさん@お腹いっぱい。
2009/01/21(水) 21:58:49> doneの後ろでリダイレクトで十分。
もちろんそんなこと知ってるよ。
でもそこは質問のポイントではないので、
焦点をぼかさないように敢えて答えない。
問題になっているのはなぜmd5sumがちゃんと動かないか、だから、
その点を回答すれば良い。
0921名無しさん@お腹いっぱい。
2009/01/21(水) 22:02:52それを言うなら、IFSだって、わざわざ別変数にバックアップして戻す必要はない。
(どうせシェルを抜ければ関係ないから)
しかし、質問は「このシェルスクリプトの無駄な部分を改良してください」
ではないのだから、そういうことはあえて回答しない。
0922903
2009/01/21(水) 22:05:10そんないい加減な。
全体がおかしいいんだから、きちんと添削しないと駄目だろ。
それに、>>900の、list.lst のフォーマットも未分明だし、
find と言う行が含まれるのか、
find とだけ書いてあるのかも、
あれだけじゃどちらともとれる。
>>問題になっているのはなぜmd5sumがちゃんと動かないか
こういうのをまさしく手前味噌と言うのだよ。
0923名無しさん@お腹いっぱい。
2009/01/21(水) 22:08:26>>900 より引用
>取ってくるハッシュ値と実際にターミナル上でみたハッシュ値が
>違うのですが、何が原因でしょうか?
ハッシュ値=md5sum値
として、質問者が聞いているのは md5sumがなぜ違ってしまうか、の点ですね。
その質問にダイレクトに答えてるだけですね。
(手前味噌ではありませんね)
「全体をきちんと添削してください」なんて質問していませんねw
0924903
2009/01/21(水) 22:08:59ああ、それもおかしいな。
当然、添削すべき。
単にこちらが、書き漏らしただけだが、
少なくとも、普通は「全部論外」と切って捨てるだろ。
要するに、アピールしたいことの為に
目をつぶったのが正解だろ?
0925903
2009/01/21(水) 22:16:12>>何が原因でしょうか?
普通は、それ以前の問題と回答するのが本当の親切。
部分的に正解を教えても、他が論外なのをスルーしたら
質問者が勘違いする元。
ようは、知っている自慢、教えたがりの自己満足。
0926名無しさん@お腹いっぱい。
2009/01/21(水) 22:24:49>>900 の質問の場合、「それ以前の問題」ではないぞ。
スクリプトは無駄があるとはいえ、
>>901 が回答した急所の1行以外は正常に動作している。
そして、>>901 の回答によって全体が正常に動作したのだから、
「それ以前の問題」はとくに存在しない。
0927名無しさん@お腹いっぱい。
2009/01/21(水) 22:27:22質問されてもいないことを、
別の回答者が回答して解決した後にわざわざ書き込んで話を蒸し返してるし。
0930名無しさん@お腹いっぱい。
2009/01/21(水) 22:39:59仕様通りの出力が得られれば正常動作。
スクリプト内部で無駄があったとしても正常動作かどうかの判断には関係ない。
0931903
2009/01/21(水) 22:44:16それは結局「バグ隠し」に繋がる。
コンピュータが期待した動作をするのと、
期待した出力をするのは別物。
バグは潰さないといけない。
0932名無しさん@お腹いっぱい。
2009/01/21(水) 22:45:31質問者にとって解決ならばそれがすべて。
それを「嘘の解決」と言っているのはお前だけ。
「嘘の解決じゃ駄目だから、真の解決を」なんて言い出すのは、
まさに教えたがりの特徴。
0933名無しさん@お腹いっぱい。
2009/01/21(水) 22:46:49で、どこにバグがあるの?
0934903
2009/01/21(水) 22:47:42頑張らなくても最適化されている場合が殆どだろうが、
そう言う気概を持ちつづけることは重要。
0935903
2009/01/21(水) 22:52:44掲示板では、発呼した質問者の背後に数多の質問者が居ると言うスタンスが肝要。
>>933
知らん。繋がる考え方と言っているだけで、今バグがあると言っている訳じゃない。
0936名無しさん@お腹いっぱい。
2009/01/21(水) 22:58:46そんな仮想の質問者まで仮定して、
質問されていないことまで解答にこだわろうとするのは
教えたがりの特徴。
0937名無しさん@お腹いっぱい。
2009/01/21(水) 23:51:410938名無しさん@お腹いっぱい。
2009/01/21(水) 23:58:52スクリプトが正しく動くかのほうが大事。
それがこのスレの存在意義。
0939名無しさん@お腹いっぱい。
2009/01/22(木) 06:31:53type -p や md5sumについて知らなかったり、
「コマンド置換」の用語を知らなかったり、
「別ファイルに出力」という要件を読み落すような
レベルの低い教えたがりは要らないな。
あと、本題のmd5sumのコマンドラインの修正点について一切答えず、
本題に関係ない部分の突っ込みばかり入れる
>>903 みたいな教えたがりは要らないな。
>>901 が先に本題の解答をしていなかったら、
>>903 によって、本題以外の突っ込みばかりで
質問者が潰されていたことだろう。
0940名無しさん@お腹いっぱい。
2009/01/22(木) 07:03:54fd3を開いて閉じる必然性:
while ...
do
:
done < list.lst
の方式では、whileループの中で(readコマンド以外が)
もし本来の標準入力を読む必要があった場合、読めなくなってしまう。
かと言って、while read file < list.lst と書いてしまうと、
ループのたびに list.lstがオープンし直されて頭から読み直されるから正常動作しない。
そこで、exec 3<list.lst で、あらかじめ list.lstをオープンしたままにしておき、
while read file 0<&3 で、readコマンドだけにリダイレクトする。
0<&3は単なるファイル記述子の複製だから、read ... <list.lst とは違って、
ファイルを頭から読み直さないから、正常動作する。
whileループを抜けたら、fd3は必要なくなるので、
exec 3<&- で閉じる。
以上、必然性は認められる。
0941名無しさん@お腹いっぱい。
2009/01/22(木) 11:27:470942名無しさん@お腹いっぱい。
2009/01/22(木) 12:50:43ってやると行頭の空白が $a に入らないんだけど、
うまく空白まで拾う方法ってないんだっけ?
0943名無しさん@お腹いっぱい。
2009/01/22(木) 12:53:44IFS= read a
0944名無しさん@お腹いっぱい。
2009/01/22(木) 13:00:460945名無しさん@お腹いっぱい。
2009/01/22(木) 13:04:26行頭の空白を拾わないと言う認識だと、
そもそも全然別物なので、
比較検討再構成的な学習法が成立しない。
ようは、デリミタ展開の問題でしょ。
0946名無しさん@お腹いっぱい。
2009/01/22(木) 13:37:08お前まだいたのかw
質問が解決した「後」で蛇足な書き込みする前に、正しい用語覚えろ。
× デリミタ展開
○ 単語分割(word splitting)
0947名無しさん@お腹いっぱい。
2009/01/23(金) 23:29:51アフォのこじつけ丸出し。
while read って書いたのは誰だ?
以外のコマンドって何だ?
読む必要とは?
おまいは、コマンドの指示に従ってスクリプトを書くのか?
本末転倒。
0948名無しさん@お腹いっぱい。
2009/01/23(金) 23:32:58見苦しい自演でご苦労ですな。
しったかをするために、
更に無知な人間をでっち上げるとは、
たいした念の入り様だ。
死ねカス。
0949名無しさん@お腹いっぱい。
2009/01/23(金) 23:35:21意味わかってる?
本来の標準入力を読むのは、readじゃなくて、
whileループ内の、do 〜 done の間のコマンドのことだよ。
while read file
do
mv -i "$file" "$file"-hoge
done < list.lst
みたいな場合、mv -i コマンドが確認のために標準入力を読んでしまう。
これが、< list.lstと競合して正常動作しない。
これを回避するために fd3 を使う。
0950名無しさん@お腹いっぱい。
2009/01/23(金) 23:56:03まさに、牽強付会。
read がリダイレクトを読むのが前提で、
do以下が読むのを「本来の」ってのが、無理やりだ。
意味分かってる?
0951名無しさん@お腹いっぱい。
2009/01/23(金) 23:59:42逆に聞くが、
>>949 のような場合 (ループ中にmv -i がある)
done < list.lst の方式でどうやって書くつもりだよ?
まさかいちいち mv -i < /dev/tty はないだろ?
fd3 (別にfd4以降でもいいが) を使うのが一番美しいだろ?
よって、お前の負け。
0952名無しさん@お腹いっぱい。
2009/01/24(土) 00:01:39何でわざわざ競合する状況にしないといけないのか?
普通に標準入力を読むと、困るのか?
特殊なライブラリを無理にリンクして、
レースコンディションを作る趣味でも有るの?
0953名無しさん@お腹いっぱい。
2009/01/24(土) 00:04:11だから、変なコード書くな。
>>949の様な場合・・を作るな。
0954名無しさん@お腹いっぱい。
2009/01/24(土) 00:05:21おい、mv -i の動作、理解してないのかよ。
done < list.lst
の状態で、mv -i が標準入力を読むと、
list.lstを読んでしまう。
で、ファイルリストが読み飛ばされてめちゃくちゃになるだけでなく、
「y」以外のデータが読めた場合は mv コマンドがキャンセルされる。
全く意図通りに動かない。
まずは、>>951 の質問に答えること。話はそれからだ。
0955名無しさん@お腹いっぱい。
2009/01/24(土) 09:11:15答える必要無し。
なんで、>>949のような場合って言う意味不明の状況に対して、
人様の脳みそを使わせようとするのか?
>>900でfd3を開いて閉じる必然性が無い事について、
「これこれこういう場合に必然性が有る」というのは、
単なる詭弁。
0956名無しさん@お腹いっぱい。
2009/01/24(土) 09:38:06>答える必要無し。
なんだ、答えられないのか。お前、負けを認めたなw
>「これこれこういう場合に必然性が有る」というのは、
>単なる詭弁。
詭弁ではない。
お前自身も、>>931 で、
「それは結局「バグ隠し」に繋がる。」と発言してる。
今現在はバグはなくても、「これこれこういう場合に」にバグが発生する可能性が
あるのをあらかじめ潰しておくことを、お前自身は肯定していたわけだ。
ならば、whileループにおいて、リダイレクトの必要があるのは readだけなのだから、
read以外の、do〜doneの間にあるコマンドはリダイレクトの影響を受けないよう、
標準入力をもとの標準入力のままにしておくことが
将来を見通したバグのないコーディングといえる。
ちなみに、do〜doneの間に mv -i を入れて、インタラクティブに確認するという
スクリプトは、普通にあり得る。
で、そういう場合、fd3を使ってオープンした上で、read 0<&3 で読むというのも、
テクニックとして存在する。
お前は、そのテクニックについて知らなかったわけだ。
0957名無しさん@お腹いっぱい。
2009/01/24(土) 10:09:380958名無しさん@お腹いっぱい。
2009/01/24(土) 10:26:46>>955 は fd3を使ったwhileループのテクニックについて理解できない。
0959名無しさん@お腹いっぱい。
2009/01/24(土) 13:05:59出来ていないのはお前。
というか、お前はシェルスクリプトのあらゆる事が、
まったく理解できていない。
やめてしまえ。
0960名無しさん@お腹いっぱい。
2009/01/24(土) 13:14:13妄想は程々に。
よくもまあ、それだけ嘘ばっかり書けるな。
本当の事が一つも書いていない。
まあ、お前のレスは何時もそうだがな。
0961名無しさん@お腹いっぱい。
2009/01/24(土) 13:44:15だから、>>951 の質問に答えろよ。
論破されて答えられなくなったからと言って、
「答える必要なし」で誤魔化すなよw
>>960 は、
whileループ中のループ本体のコマンドが標準入力を読むこともあるという、
ごく普通の状況すら想像できなかったんだろw
もっと想像力を身に付けろ。
シェルスクリプトは、様々な可能性を考慮してコーディングすること。
あと、>>959,960 には、具体的なことが一言も書かれていない。
つまり、全然反論になっていない。
これは、論破された人間が負け惜しみで書く典型的な文章。
0962名無しさん@お腹いっぱい。
2009/01/24(土) 13:53:070963名無しさん@お腹いっぱい。
2009/01/24(土) 17:11:48結論: 解決済みの質問に的外れな文句付けた>>903が無様。面白いから、もっとやれ。
>>904 解決済みの事をくどく教えたがる。(後ろの方で仮想的を教えたがりと叩いているのが笑える)
>>906, >>910, >>912 恥の上塗り。
>>922 必死に質問者のあらさがし。
>>925 元質問者の質問の一部を取り出して意味不明のレス。
>>928 必死に探しあてた(と確信した)アラにすがる
>>934-935 撤収用意?
>>947, >>950 もはや日本語になっていない
0964名無しさん@お腹いっぱい。
2009/01/24(土) 17:39:22テクニックを知っているにも関わらず、
質問内容自体はごくごく初歩的なのでちょっと驚いた
まわりからシェルスクリプト書くときのルールみたいにして
教え込まれてるのかな?
0965名無しさん@お腹いっぱい。
2009/01/24(土) 18:47:440966名無しさん@お腹いっぱい。
2009/01/25(日) 21:31:320967名無しさん@お腹いっぱい。
2009/01/25(日) 23:34:48do
echo $buf
done < hogehoge
のhogehogeのところをファイルじゃなくてコマンドにすることは可能ですか?
これじゃ無理でしたが、イメージはこんな感じです。
while read buf
do
echo $buf
done < `grep . hogehoge`
0968名無しさん@お腹いっぱい。
2009/01/25(日) 23:37:45do
echo $buf
done
0969名無しさん@お腹いっぱい。
2009/01/25(日) 23:47:06ありがとうございます!
ついでにCSVファイルの各レコードのカラム数を出したいんですが、うまい方法ありますか?
awk -F ' { print NF } ' hoge.csv
でもいいんですが、awkが嫌いなので使いたくないです
0970名無しさん@お腹いっぱい。
2009/01/26(月) 00:10:00sed 's/\\,//' hoge.csv | awk -F, '{ print NF; }'
0971名無しさん@お腹いっぱい。
2009/01/26(月) 00:10:210972名無しさん@お腹いっぱい。
2009/01/26(月) 06:33:55IFS=,
while read line 0<&3
do
set $line
echo $#
done 3< hoge.csv
ちなみに、fd3を使う方式にしといたよw
0973名無しさん@お腹いっぱい。
2009/01/26(月) 11:08:04while read line 0<&4
do
echo ",$line" | tr -cd "," | wc -c
done 4< hoge.csv
0974名無しさん@お腹いっぱい。
2009/01/26(月) 12:31:330975名無しさん@お腹いっぱい。
2009/01/26(月) 12:34:45質問は、
>>969 が言うように、
> awk -F, '{ print NF }' hoge.csv
>でもいいんですが、
なのだから、↑のawkと同等のシェルを作ればいいだけ。
エスケイプなんて余計なことする必要なし。
0976名無しさん@お腹いっぱい。
2009/01/26(月) 12:45:130977名無しさん@お腹いっぱい。
2009/01/26(月) 13:34:54そんなら、とっとと「awkと同等のシェル」作れ。
0978名無しさん@お腹いっぱい。
2009/01/26(月) 13:36:50Excelで読めないようなCSVはCSVとは認めません。
0979名無しさん@お腹いっぱい。
2009/01/26(月) 13:56:43>>972
0980名無しさん@お腹いっぱい。
2009/01/26(月) 13:58:36awkと同等のものがスクリプトなわけないだろ。
シェルでいいんだよ。
レス数が950を超えています。1000を超えると書き込みができなくなります。