シェルスクリプト総合@LINUX Part3
■ このスレッドは過去ログ倉庫に格納されています
0001login:Penguin
2007/07/10(火) 23:17:13ID:qGthZdMEまあそれはそれとして、BASHウゼーとか言われる心配なく
平和にLINUX的スクリプト談義しましょうよ。
初めての自作スクリプト、自信ないから見てください。な初心者から
トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで
いろいろな人に参加して頂けると嬉しいです。
perlやらPythonやらの話が混ざっても良いんでない?
【sed】シェルスクリプト総合@LINUX Part2【awk】
http://pc11.2ch.net/test/read.cgi/linux/1154578200/
http://pc8.2ch.net/test/read.cgi/linux/1121994321/
>>2-5あたりに色々と。
0631login:Penguin
2008/02/18(月) 13:16:10ID:AGIm4SRVありがとうございます。
やってみます。
0632login:Penguin
2008/02/19(火) 08:50:21ID:90boQwVS0633login:Penguin
2008/02/19(火) 09:00:32ID:7ADZuvq7ルーチンワークで楽できる(場合がある)
0634login:Penguin
2008/02/19(火) 16:05:41ID:VrKwqWf/作業の自動化や、例えばユーザを100人登録しないといけないとか言う、膨大な作業を
物凄い速度で短時間で終わらせる事が出来るようになるとか。
0635login:Penguin
2008/02/19(火) 17:25:49ID:90boQwVSほほぅ、ありがとうございます。
0636login:Penguin
2008/02/19(火) 19:54:38ID:oWc/fsPo高級な紙と鉛筆だとしか思ってなさげな人。たまにいるけど……。
0637login:Penguin
2008/02/19(火) 19:56:54ID:7ADZuvq70638login:Penguin
2008/02/19(火) 23:07:22ID:VrKwqWf/どんなにそれが重労働だろうが難しい計算をしないといけなかろうが、
忠実に高速かつ正確、大量に実行させる事が出来るから凄いよ・・・。
ただし、その仕事の仕方を教える(アルゴリズムを教える)のがかなり苦労するんだけどな・・・。
0639login:Penguin
2008/02/20(水) 03:07:58ID:eOYCs3Nz0640login:Penguin
2008/02/20(水) 03:37:12ID:Z0UaqwNw基本的に人間には絶対できない、ということを知らない者は>>639だけだというだけの話かと。
0641login:Penguin
2008/02/20(水) 04:33:00ID:H+YlTABW639は高速で、と書いてあるんだから、「速度を問わなければ」人間が…と
読むのが妥当という答にしかならないぞ。
どうせそういう突っ込みするなら空間計算量でやればよかったのに。
0642login:Penguin
2008/02/20(水) 07:24:32ID:kPfB9gdm0643login:Penguin
2008/02/20(水) 08:22:42ID:TBsfl6zQQ) シェルスクリプトを覚えるとなにが出来るようになるんですか?
A) 理論ばっかりのたまって生産性の無い人ってよくいるよね。
0644login:Penguin
2008/02/20(水) 09:09:29ID:s2YtVBn2シェルスクリプトでやりたいと思ったこと。
0645login:Penguin
2008/02/20(水) 10:22:00ID:0BB6Gw/L乳はAAだけど orz
0646login:Penguin
2008/02/20(水) 10:22:28ID:0BB6Gw/L誤爆った。正直スマンかった。
0647login:Penguin
2008/02/20(水) 10:47:15ID:VHJ6cFjQ基本的に彼女ができないことなのでシェルスクリプトでもできません。
0648login:Penguin
2008/02/20(水) 11:22:35ID:eOYCs3NzAAでもいいということなので,アスキーアートでおっぱいを表現することならシェルスクリプトで可能です
さらに最近のターミナルエミュレーターはアンチエイリアスがきいてるのでなめらかですよ
0649login:Penguin
2008/02/20(水) 11:31:04ID:Z0UaqwNwできるというなら精々一生をかけて歩いて船をこいで手紙を届けにいって、それを証明してほしいものだ。
コンピュータという人間が使うモノが、人間以上の方法(アルゴリズムなどの知性)を知らないのは当然のことだが
最近ではその知性すら、コンピュータを使ったシミュレーション解析などで
得ることが増えているのが現実だったりするわけで。特に知の最先端ほどそうだ。
もはや人類はコンピュータを使わないと新しい知識を得ることすら「できない」状況なんだけどね。
そういう現実が見えない人はやっぱり自分の納得を唯一の判断基準とする文系人かな。
人間は遠くのものが見え、遠くの人と話し、より多くの知識を得、共有できるようになった。
100年前に比べたら、ほんとうに夢の魔法かコミックの世界だ。コンピュータはほんとに魔法の箱みたいじゃないか。
そのセンスは逆にあまり間違っていない気がするけどな。
「高度に進んだ科学技術はもはや魔法と見分けがつかない」アーサー・C・クラーク
0650login:Penguin
2008/02/20(水) 12:06:00ID:eOYCs3Nz日本語でおk
電報というものがあるんだが最近のゆとりは知らないのか?
0651login:Penguin
2008/02/20(水) 12:14:29ID:pg37fRgc0652login:Penguin
2008/02/20(水) 12:23:41ID:XajlgLxx0653login:Penguin
2008/02/20(水) 16:28:17ID:vrkF+BtG>>648
そういうシェルスクリプト作って公開してよwwwwぜひ実行してみたい・・w
0654login:Penguin
2008/02/20(水) 19:29:13ID:7TuVNRao句点から次の句点まで地球半周ぐらいあって、だらだらと続く感じが。
http://sankei.jp.msn.com/culture/academic/080116/
0655login:Penguin
2008/02/21(木) 06:19:36ID:FDbXS9I4こういう無駄な長文を書ける才能には素直に感心するよ。
0656login:Penguin
2008/02/21(木) 12:33:09ID:xpu03eg40657login:Penguin
2008/02/21(木) 18:35:15ID:oj1Q2W6E0658login:Penguin
2008/02/24(日) 10:15:17ID:RUTtO6AQあれはシェルスクリプトではないから違うか・・・。
0659login:Penguin
2008/02/24(日) 11:38:47ID:kyu4Np6cつ www.tkl.iis.u-tokyo.ac.jp/~toyoda/
0660login:Penguin
2008/02/24(日) 13:02:41ID:FjGZZj6Vcdするたびに一緒にlsもして欲しいんですが、どうやって書いたらいいでしょうか?
aliasだとうまくできないです。
0661login:Penguin
2008/02/24(日) 13:04:14ID:UaS7yo8D0662login:Penguin
2008/02/24(日) 13:21:41ID:CzUoXlF20663login:Penguin
2008/02/24(日) 13:24:30ID:UaS7yo8D0664login:Penguin
2008/02/24(日) 14:04:47ID:I77Y2jQo0665login:Penguin
2008/02/24(日) 14:44:06ID:FjGZZj6Vできないみたいです。
カレントディレクトリが切り替わりません。
0666login:Penguin
2008/02/24(日) 14:53:32ID:UaS7yo8Dうちでは動作確認したんだが・・・なんでだろね。
0667login:Penguin
2008/02/24(日) 14:54:08ID:UaS7yo8D0668login:Penguin
2008/02/24(日) 15:09:41ID:I77Y2jQo0669login:Penguin
2008/02/24(日) 15:13:49ID:uTpa9gVSぢゃあ関数にしちゃうとか。
function cls {
cd $1 && ls
}
0670login:Penguin
2008/02/24(日) 15:23:08ID:UaS7yo8D#!/bin/sh
cd $1
ls
として、foo.shとして、
alias cds='. foo.sh'
かなあ。動作確認はしたw
0671login:Penguin
2008/02/24(日) 15:36:14ID:FjGZZj6V>>669,670 でcdにするとなぜか動かない。
でも参考になりました。
>>668
わかんないです。
0672login:Penguin
2008/02/24(日) 15:41:52ID:FjGZZj6V'cd' $1
ls
として、foo.shとして、
alias cd='. foo.sh'
でできました。(・∀・)イイ!
ありがとう。
0673login:Penguin
2008/02/24(日) 15:42:06ID:Sa+MU/+bbuiltin cd $1 && ls
}
0674login:Penguin
2008/02/24(日) 15:46:14ID:I77Y2jQo0675login:Penguin
2008/02/24(日) 15:47:40ID:UaS7yo8Dビルトインか。やっぱりman読まないとダメだな。
ありがとう。
0676login:Penguin
2008/02/24(日) 15:54:18ID:l3aT8ww/0677login:Penguin
2008/02/24(日) 15:55:21ID:FjGZZj6Vそれも(・∀・)イイ!
トン
0678login:Penguin
2008/02/24(日) 16:08:01ID:OZdK2Ezs0679login:Penguin
2008/02/24(日) 16:57:30ID:M1aIs9jIslねぇ・・・Vine 3.2だとmakeしてもエラーが出てmake出来ないんだけど・・・?
apt-get install build-essential は入ってる環境です。
0680login:Penguin
2008/02/24(日) 21:43:32ID:X4+soAGjlibncurses.soのことか?
0681login:Penguin
2008/02/24(日) 22:41:47ID:WU8Eis2Qcd に -P とかオプションつけると機能しなくなるぞ。
cd() { builtin cd "$@" && ls; }
0682login:Penguin
2008/02/24(日) 22:44:30ID:CzUoXlF2それしばらく使ってみるとわかると思うけど、
そのままではナイーブすぎて少し不便だよ。
zshで同じようなことやってるけど、次の点は考慮した方がいいです。
・サブシェルで実行されたときにはlsしない
・行数が多すぎるときは適当な長さで切り、省略した旨を表示
0683login:Penguin
2008/02/25(月) 12:48:54ID:fTf5K0mT結局やらず仕舞いだったようだし、どうせならシェルスクリプトの勉強がてらやってみようとおもった。
作りたい理想は以下のとおり
・コマンドラインでオプション指定を行い、検索ディレクトリとサブディレクトリへの再帰検索をするかどうか、あとファイルサイズ閾値を指定できる
・走査しているディレクトリにあるファイルパス&ファイルサイズのペアをリストとして吐く
・ファイルサイズ閾値未満で、ファイルサイズが一致したものに対してmd5sumを実行し、両方が同一のハッシュを吐いた場合、表示する。
・ファイルサイズ閾値を設定する理由はmd5sumが時間がかかりそうだから。閾値以上のサイズ一致ファイルはmd5sumすることなく表示する。
0684login:Penguin
2008/02/25(月) 12:52:01ID:fTf5K0mT#!/bin/sh
md5sum $1/* | uniq -D --check-chars=32 | sed 's/^[0-9a-f]* \*//g'
上のだけで済むかな。標準エラーがうざいけど・・・
まずはディレクトリの再帰検索について質問したいところです。
0685login:Penguin
2008/02/25(月) 12:55:37ID:fTf5K0mTうちの場合はwgetで自動保存したファイルの整理だから、ファイル名が必然的に「DLファイル名+.連番」だから気にならないけど
まったく違うファイル名かつ内容は同一ってときに、ハッシュ値でsortしてあげていた方がいいよね
そう考えたらsedでハッシュ値をわざわざ消す必要もないか・・・
md5sum $1/* | sort | uniq -D --check-chars=32
0686login:Penguin
2008/02/25(月) 12:57:54ID:fTf5K0mT0687login:Penguin
2008/02/25(月) 13:38:12ID:fTf5K0mT#!/bin/sh
TMPFILE="filelist"
touch $TMPFILE
find $1 | while read FILENAME; do
if [ -f "$FILENAME" ]; then
md5sum "$FILENAME" >> $TMPFILE
fi
done
sort < $TMPFILE | uniq -D --check-chars=32
rm $TMPFILE
もうちょっとスマートにならないかなあ・・・ あとユニークなサイズのファイルはmd5sumさせたくないなあ
0688login:Penguin
2008/02/25(月) 13:47:58ID:pu40lUxS#!/bin/sh
# finddup.sh -- find . | finddup.sh
while read -r FILENAME
do
[ -f "$FILENAME" ] &&
printf "%14d:%s\n" `stat -c %s "$FILENAME"` "$FILENAME"
done | sort | uniq -D -w14 | cut -b 16- |
xargs md5sum | sort | uniq -D -w32
0689login:Penguin
2008/02/25(月) 13:53:38ID:pu40lUxS0690login:Penguin
2008/02/25(月) 13:57:12ID:ATO0A7OZfind . -type f -print0 | xargs -0 md5sum | sort | uniq -D -w32
0691login:Penguin
2008/02/25(月) 14:17:36ID:fTf5K0mTありがとう!
あ、ただファイルやディレクトリ名にスペースが入るとmd5sumにしっかり渡せないみたいです
bash on cygwin環境だとWindowsの「コピー (2) 〜 hoge.txt」という名前が恨めしい
>>690
出力結果同じだΣすげえ
ちょっとman読んでこよう・・・
0692login:Penguin
2008/02/25(月) 14:23:38ID:pu40lUxS" md5sum
でどうかな。ちゃんとテストしなきゃだめだね
まあ改行文字を含むファイルがあるとだめなんだけど、面倒だから他の言語でやらせたほうがいい
0693login:Penguin
2008/02/25(月) 14:26:43ID:ATO0A7OZ>>690
0694login:Penguin
2008/02/25(月) 14:27:32ID:pu40lUxS全部のファイルにmd5sumかけたら遅いだろ
0695login:Penguin
2008/02/25(月) 14:31:42ID:fTf5K0mT0696login:Penguin
2008/02/25(月) 14:38:34ID:ATO0A7OZんで、printf 側でも \n じゃなく \0 を使うようにする。
0697login:Penguin
2008/02/25(月) 14:39:51ID:pu40lUxS0698login:Penguin
2008/02/25(月) 14:43:11ID:fTf5K0mT#!/bin/sh
# finddup.sh -- ./finddup.sh target-path
find $1 | while read -r FILENAME
do
[ -f "$FILENAME" ] &&
printf "%14d:\"%s\"\n" `stat -c %s "$FILENAME"` "$FILENAME"
done | sort | uniq -D -w14 | cut -b 16- | xargs md5sum | sort | uniq -D -w32
0699login:Penguin
2008/02/25(月) 15:21:01ID:zYqxhFYE0700login:Penguin
2008/02/25(月) 16:57:52ID:fTf5K0mTどうも二進も三進も行かない
$ ./findup.sh ~/pic/jun.2chan.net/
2件の一致ファイル:8f7c1e2adb45adbfdb4d86adb1b9e894--------------------------
~/jun.2chan.net/b/src/1192805081129.jpg
~/jun.2chan.net/b/src/1192805081141.jpg
-------------------------------------------------------------------------------
~/jun.2chan.net/b/src/1192805081129.jpgを削除しますか?[y/N/a]
~/jun.2chan.net/b/src/1192805081141.jpgを削除しますか?[y/N/a] y
~/jun.2chan.net/b/src/1192805081141.jpgを削除しました。
3件の一致ファイル:6fc4bdc4bc3bb06882bc98d9cbeb60c3--------------------------
~/jun.2chan.net/b/src/1192800164913.jpg
~/jun.2chan.net/b/src/1194189136460.jpg
~/jun.2chan.net/b/src/1194189137115.jpg
-------------------------------------------------------------------------------
~/jun.2chan.net/b/src/1192800164913.jpgを削除しますか?[y/N/a] y
~/jun.2chan.net/b/src/1192800164913.jpgを削除しました。
~/jun.2chan.net/b/src/1194189136460.jpgを削除しますか?[y/N/a] y
~/jun.2chan.net/b/src/1194189136460.jpgを削除しました。
↑同一として列挙されたパスの残りが1になると削除せず次へ
0701login:Penguin
2008/02/25(月) 17:00:46ID:ATO0A7OZそこまで行くとシェルスクリプトには荷が重いんじゃないか?
0702login:Penguin
2008/02/25(月) 17:10:48ID:fTf5K0mT以下の点でハードルがあがってるみたいですね
・一致したファイルのグループ分け
・ファイルを一つだけ残して削除した場合、残りの1ファイルは削除しない
列挙した全ファイルに対して、質問→削除というのは簡単にいけそうな感じ。
自分の知識だけで無理と判断して投げるのはアレだと思ったんだけど、やっぱ難しいかなあ
0703login:Penguin
2008/02/25(月) 18:09:02ID:pu40lUxS# askdelete.sh -- find . | finddup.sh | askdelete.sh
# よくテストされてませんので注意
TMPF=`mktemp /tmp/askdelete.XXXXXX`
trap 'rm $TMPF' 0
CURHASH=
COUNT=0
(cat; echo DUMMYHASH /dev/null) |
while read -r HASH FILENAME; do
if [ "$CURHASH" ] && [ "$CURHASH" != "$HASH" ]; then
echo "------------------------------"
echo "$COUNT 件の一致ファイル:$CURHASH"
tail -n $COUNT $TMPF | cut -b 33-
echo "------------------------------"
tail -n $COUNT $TMPF | while read -r HASH FILENAME; do
[ $COUNT -eq 1 ] && break
echo -n "$FILENAME を削除しますか? [yN] "
while read ANSWER
do
case "$ANSWER" in
[yY]) echo rm "$FILENAME"
COUNT=`expr $COUNT - 1` ;;
esac
done < <(head -1 /dev/tty)
done
COUNT=0
fi
echo $HASH $FILENAME >>$TMPF
CURHASH=$HASH
COUNT=`expr $COUNT + 1`
done
0704login:Penguin
2008/02/25(月) 18:12:29ID:pu40lUxS違う言語で書き直したほうがいい。
0705login:Penguin
2008/02/25(月) 18:17:46ID:fTf5K0mTちょっとテストしてみます!
0706login:Penguin
2008/02/25(月) 19:20:15ID:pu40lUxS# askdelete.sh -- find . | finddup.sh | askdelete.sh
TMPF=`mktemp /tmp/askdelete.XXXXXX`
trap 'rm -f $TMPF' 0 1 2 3 15
CURHASH=
COUNT=0
(cat; echo DUMMYHASH /dev/null) |
while read -r HASH FILENAME; do
if [ "$CURHASH" ] && [ "$CURHASH" != "$HASH" ]; then
echo "------------------------------"
echo "$COUNT 件の一致ファイル:$CURHASH"
tail -n $COUNT $TMPF
echo "------------------------------"
tail -n $COUNT $TMPF | while read -r FILENAME; do
[ $COUNT -eq 1 ] && break
echo -n "$FILENAME を削除しますか? [yN] "
while read ANSWER; do
case "$ANSWER" in
[yY]) echo rm "$FILENAME"
COUNT=`expr $COUNT - 1` ;;
esac
break
done < /dev/tty
done
COUNT=0
fi
echo $FILENAME >>$TMPF
CURHASH=$HASH
COUNT=`expr $COUNT + 1`
done
すこしよくなった
参考になる http://www.nurs.or.jp/~asada/FAQ/UNIX/section3.8.html
0707login:Penguin
2008/02/25(月) 20:58:36ID:NDOa2UbC0708login:Penguin
2008/02/26(火) 01:26:57ID:Knz7qJ2hサブシェルをわざわざ使う必要は無いのでは?
--- (cat; echo DUMMYHASH /dev/null) |
+++ { cat; echo DUMMYHASH /dev/null; } |
0709login:Penguin
2008/02/26(火) 01:31:17ID:V2S90oTofind . -type f -print | xargs md5sum | sort | while read i
do
set -- $i
test -e .$1 && rm -i $2
touch .$1
done
削除して残りが1つなら消さずに次、ということは最初の1つは
無条件で残して、2つ目以降についてのみ rm -i で削除確認すれば
いいんだよね?
記憶用に .<md5sum> なマーカ作ってるけど、ここは md5sum な
ダミー環境変数の方がいいかも。
0710login:Penguin
2008/02/26(火) 08:30:35ID:V4Ca66lJ全ファイルにmd5sumしたら遅くならない?
0711login:Penguin
2008/02/26(火) 08:46:21ID:M2OUW+0jパイプを使うと結局はサブシェルが起動されるんだから () のほうがわかりやすいと思うよ
0712login:Penguin
2008/02/26(火) 09:53:07ID:jk2VB7eGどうせシェルスクリプトなんて使い捨てなんだし
多少遅くてもいいんじゃない?
実行時間の長さより
思いついたことをちゃちゃっと実行できる手軽さが大事でしょ。
0713login:Penguin
2008/02/26(火) 10:56:04ID:V4Ca66lJもっともな意見だと思うが、肝心なことを棚に上げてるな
シェルスクリプトの本質は処理を効率化するための機能なんだから、
手軽に加えて「より早くスマートに処理」できる方がいいだろうよ
どうせ使い捨てとか言い出したら、いつまで経っても遅くて低機能なスクリプトしか書けないぜ?
まあせっかくいい方向で流れてるから、俺も最適化してみるか。
0714login:Penguin
2008/02/26(火) 15:09:02ID:KrvpwwSSどうよ、この快感、すごいよ、俺!!
ただしスクリブト書きに3時間かかるけどなっ!!、
みたいな・・・・
0715login:Penguin
2008/02/26(火) 15:18:25ID:jk2VB7eGその作業を200回繰り返さなきゃいけないなら
3時間かけて書いて5秒に短縮してもいいけど、
そういうのはシェルじゃなくて別な言語を使った方がいいと思う。
0716login:Penguin
2008/02/26(火) 16:04:42ID:V4Ca66lJ良いスクリプトを早く書けるスキルを養うといった考えはないのかよw
まぁ価値観が違うなら仕方ないが
>>715
言いたいことは分かるし仕事では俺も同じスタンスだ。モトが取れない作業をするのはアホだと思う。
さらに>>1にあるようにPerlやPythonを使ってもいいと書いてあるように、別にシェルスクリプトに固執はしてないさ。
ただID:fTf5K0mTみたいに質問を丸投げせずに分かってないながらも自分で試してみている奴も居るんだから
「どうせ使い捨て」や「パンがなければケーキを」じゃなくて、しっかりした見本を見せてやろうぜw・・・と思ったんだ。
勝手に限界を作っちゃダメさ・・・!
0717login:Penguin
2008/02/26(火) 17:08:11ID:KrvpwwSS0718login:Penguin
2008/02/26(火) 17:30:17ID:DxWnmOPN茶化すだけならWindowsに切り替えてフリーソフトスレにでも行け。
同一ファイル発見ソフトなんていくつもあるから。
自分で作ろうと思わん奴はウザイだけだ。
0719login:Penguin
2008/02/26(火) 22:37:31ID:ecwr7n8r0720login:Penguin
2008/02/27(水) 00:57:44ID:k4ecn/gWLinuxならawkでもperlでもpythonでもgccでも大概入ってんだろうになんで
>Windowsに切り替えてフリーソフトスレにでも行け
なのかマジで理解できなかった。
なるほどな、そういう考え方もあるか。これは考えが及ばなかったな。
まぁうちext3だしなぁ。
0721login:Penguin
2008/02/27(水) 02:09:44ID:5Pe1iZtEサブシェル一個より分かりやすさを重視、ってのも分かるが
プロセスを fork するコストはバカにできないぞ。
たった 10 回でもこれだけ差が出る。
$ time for i in 0 1 2 3 4 5 6 7 8 9 ; do { :; } ; done
real 0m0.001s
user 0m0.010s
sys 0m0.000s
$ time for i in 0 1 2 3 4 5 6 7 8 9 ; do ( :; ) ; done
real 0m0.221s
user 0m0.140s
sys 0m0.140s
今回のはともかく、ループの中で無駄なサブシェル起こすと
かなり処理速度に効いてくるから、「より早くスマートに処理」を
目指すなら気にした方がいいと思うよ。
0722login:Penguin
2008/02/27(水) 12:04:07ID:5xPFitgJそうじゃなくて、パイプではサブシェルが起動されるでしょう?
$ { FOO=foo; echo $FOO; } | cat
foo
$ echo $FOO
$
0723login:Penguin
2008/02/27(水) 23:04:12ID:6K2aGQ5hpopenってfork & execvじゃなかったっけ?
0724login:Penguin
2008/02/28(木) 01:04:44ID:2c894vLrabc
$cat a002
def
$cat a003
ghi
という内容の連番ファイルがあるときに、
a001,a002,a003ファイルそれぞれの先頭に
自身のファイル名を追記していくにはどのようにすればいいでしょうか?
$cat a001
a001
abc
$cat a002
a002
def
$cat a003
a003
ghi
0725login:Penguin
2008/02/28(木) 01:27:48ID:k7I0oIXnecho $a > temp
cat $a >> temp
mv temp $a
done
0726login:Penguin
2008/02/28(木) 01:53:39ID:2c894vLrできましたありがとうございます!!
0727login:Penguin
2008/02/28(木) 11:40:05ID:xnWdeCI1例:
編集前) aaa,bbb,"ccc,ddd","eee",ff
編集後) aaa,"ccc,ddd",ff
カンマを含むデータは必ずダブルクォーテーションで囲まれているのですが
どの列にカンマを含むデータが存在するかは不明です。
192の方法だと特定の列は出せるのですが、複数列を表示することができないので。。。
0728login:Penguin
2008/02/28(木) 11:45:53ID:sfXUxgeOシェルスクリプトでがんばるより↓あたり使ったら?
http://blog.livedoor.jp/dankogai/archives/50765677.html
0729login:Penguin
2008/02/28(木) 12:17:28ID:DWKM9TyE無駄にがんばってみた。PerlとかSQLiteとか使った方が絶対いい。
#!/usr/bin/awk -f
BEGIN {OFS=",";}
function csplit(s,a,c,f,i,j,k){delete a;for(i=j=1;;i++){
c=substr(s,i,1);if(c==""){a[k++]=substr(s,j,i-j);break;}
else if(c=="\""){if(f>0){if("\""==substr(s,i+1,1))i++;
else f=0;}else f=1;}else if(c==","&&f==0){a[k++]=substr(s,
j,i-j);j=i+1;}}return k;}
{n=csplit($0,array);print array[0],array[2],array[4];}
0730login:Penguin
2008/02/28(木) 20:37:03ID:VzdvBwjj字下げを知らないやつがまだこの世にいたのか。
■ このスレッドは過去ログ倉庫に格納されています