トップページunix
987コメント345KB

シェルスクリプト総合 その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/
0967名無しさん@お腹いっぱい。2009/01/25(日) 23:34:48
while read buf
do
echo $buf
done < hogehoge
のhogehogeのところをファイルじゃなくてコマンドにすることは可能ですか?

これじゃ無理でしたが、イメージはこんな感じです。
while read buf
do
echo $buf
done < `grep . hogehoge`

0968名無しさん@お腹いっぱい。2009/01/25(日) 23:37:45
grep . hogehoge | while read buf
do
echo $buf
done
0969名無しさん@お腹いっぱい。2009/01/25(日) 23:47:06
>>968
ありがとうございます!

ついでにCSVファイルの各レコードのカラム数を出したいんですが、うまい方法ありますか?
awk -F ' { print NF } ' hoge.csv
でもいいんですが、awkが嫌いなので使いたくないです
0970名無しさん@お腹いっぱい。2009/01/26(月) 00:10:00
>>969
sed 's/\\,//' hoge.csv | awk -F, '{ print NF; }'
0971名無しさん@お腹いっぱい。2009/01/26(月) 00:10:21
Text::CSV_XS
0972名無しさん@お腹いっぱい。2009/01/26(月) 06:33:55
>>969

IFS=,
while read line 0<&3
do
set $line
echo $#
done 3< hoge.csv


ちなみに、fd3を使う方式にしといたよw
0973名無しさん@お腹いっぱい。2009/01/26(月) 11:08:04
なら俺はfd4を使う方式で

while read line 0<&4
do
echo ",$line" | tr -cd "," | wc -c
done 4< hoge.csv
0974名無しさん@お腹いっぱい。2009/01/26(月) 12:31:33
fd?言う前に、"\,"エスケイプくらい処理しろ。
0975名無しさん@お腹いっぱい。2009/01/26(月) 12:34:45
>>974
質問は、

>>969 が言うように、
> awk -F, '{ print NF }' hoge.csv
>でもいいんですが、

なのだから、↑のawkと同等のシェルを作ればいいだけ。
エスケイプなんて余計なことする必要なし。
0976名無しさん@お腹いっぱい。2009/01/26(月) 12:45:13
スクリプトを略すな
0977名無しさん@お腹いっぱい。2009/01/26(月) 13:34:54
>>975
そんなら、とっとと「awkと同等のシェル」作れ。
0978名無しさん@お腹いっぱい。2009/01/26(月) 13:36:50
>>974
Excelで読めないようなCSVはCSVとは認めません。
0979名無しさん@お腹いっぱい。2009/01/26(月) 13:56:43
>>977
>>972
0980名無しさん@お腹いっぱい。2009/01/26(月) 13:58:36
>>976
awkと同等のものがスクリプトなわけないだろ。
シェルでいいんだよ。
0981名無しさん@お腹いっぱい。2009/01/26(月) 14:55:35
シェルとも限らないのでは
0982名無しさん@お腹いっぱい。2009/01/26(月) 22:11:30
おでん?
0983名無しさん@お腹いっぱい。2009/01/26(月) 22:32:21
おでん!?
0984名無しさん@お腹いっぱい。2009/01/26(月) 22:35:25
今の時期はやっぱりおでんじゃない?
>>980
次スレ立ててよ。
0985名無しさん@お腹いっぱい。2009/01/27(火) 07:24:42
>>980
次スレでは、>>11>>9 のfindの記述のところにマージしてね。
0986名無しさん@お腹いっぱい。2009/01/27(火) 07:28:04
>>12も忘れるな
0987名無しさん@お腹いっぱい。2009/01/27(火) 07:46:15
スレ伸びてるなーと思ってきたが

とりあえず、>>903が、分かってないのに偉そうなところまで読んだ
レス数が950を超えています。1000を超えると書き込みができなくなります。