■掲示板に戻る■ 全部 1- 最新50シェルスクリプト(awk含む)でのエラー
- 1 :名無しさん@お腹いっぱい。 :2001/04/19(木) 09:17
- シェルに詳しい方、有識者の方々に質問です。
100万行近くあるテキストファイルをawkを使用して編集、出力しよう
としているのですが途中で以下のようなエラーが発生してしまいます。
@「forkで失敗した」
-> プロセス上限値越え?
A「空き領域を使い切った」
-> メモリに情報をのっけきれなかった?
上記エラーが発生したときには、上記エラーメッセージしか
出力されません。
仮に、textファイルが、a.txtとしたら
cat a.txt | awk '{ ... }' | awk '{ ... }' | awk '{ ... }'
のように、awkをパイプでつないで処理しています。
そこで、質問ですが
@パイプでawkをつなぐと、最後のawkが終わるまで
プロセスはおわらないものなのでしょうか?
それとも、負荷がかかってしまうのでしょうか?
Aawkでつないでいる間、awkで処理していない行や
awkで処理している行はメモリに乗っていると思うのですが、
あまりにも行が大きいためどこかにswapしていると思います。
どこに吐き出されるのでしょうか?
どうぞ、よろしくお願いします。
- 2 :壊れたデバイスさん :2001/04/19(木) 12:58
- 普通はスクリプトファイル書いて
% awk -f foo.awk
じゃない?
- 3 :名無しさん@お腹いっぱい。 :2001/04/19(木) 13:05
- スクリプトみせてもらわんと分からんが、
中にデータを溜め込みすぎてない?
巨大な配列とか。
- 4 :名無しさん@お腹いっぱい。 :2001/04/19(木) 13:17
- >>1
一行が1MBとかじゃないなら、パイプで目に見えるほどメモリを食ったりしない
- 5 :1 :2001/04/19(木) 13:23
- >>2
そういうやり方もありますが、パイプでもできます。
>>3
いや、100万行くらいあるんスよ......
>>4
そうなんですか?うーん......
- 6 :名無しさん@お腹いっぱい。 :2001/04/19(木) 13:32
- >>1
どいつが一番メモリを食っているか調べてみたの?
- 7 :名無しさん@お腹いっぱい。 :2001/04/19(木) 14:38
- 無印awkだと-mr -mfなどのオプションで使用メモリを増やせます。
gawkは内部制限はないようです。
forkなんとかのエラーとは関係なさそうだけど参考までに。
- 8 :1 :2001/04/19(木) 15:19
- >>6
shellの変数にその結果をとってるのですが、そこで
OutOfMemoryがでていました。やはり、ファイルにおとして
やるしかないのでしょうか??
>>7
無印awkのバージョンが古いらしく、-m*オプションが使用できません(泣
- 9 :名無しさん@お腹いっぱい。 :2001/04/19(木) 16:29
- ワークファイルでも使ってawkを1個ずつ流してもダメなのか?>>1
- 10 :3 :2001/04/19(木) 17:23
- だ〜か〜ら。
データが100万行あっても、1行処理してはprint,1行処理してはprint,
とやってればそんなのはでないのないのかなとおもた。
でも、たとえば、
{
array[$1]=なんごかかんとか
}
とかやって、巨大な配列になってないか聞いてるんですが?
で、7さんにみたいにしてきりわけないさいな。
awk -f '{ }' a.txt >tmp1
awk -f '{ }' tmp1 >tmp2
awk -f' '{ } tmp2 >tmp3
とかやってどこで落ちるかしらべれ。
落ちなきゃこれでやればいいし、そこでパイプラインを疑うべし。
- 11 : :[ここ壊れています]
- [ここ壊れています]
- 12 :3=10 :2001/04/19(木) 17:43
- だから、つべこべ言わずに、やってみれ。
美しい、美しくないの前にどこに原因があるのか切れ分けれ。
もうつきあわん。
- 13 :3=10=11 :2001/04/19(木) 17:44
- 訂正
10で
7さんみたいに->9さんみたいに。
- 14 :3=10=12 :2001/04/19(木) 17:49
- 私も馬鹿だな。=11だって.....
>>11
10の言ってる内容がわかってないな......
awk '{ ... }' のひとつの中に10のようなことをしてないかきいてるんだけど。
つき合わんといいつつ書いてる馬鹿>わし
- 15 :名無しさん@お腹いっぱい。 :2001/04/19(木) 18:00
- >>11
最初からそう書け
変数に百万行の結果を流し込めばメモリ不足になって当たり前だろ。ヴォケ
- 16 :名無しさん@お腹いっぱい。 :2001/04/19(木) 18:01
- >>15
激しく同意!
awkもパイプも関係ねーよ>>1
- 17 :壊れたデバイスさん :2001/04/19(木) 18:04
- /bin/sh なら '{
...
}
{
...
}'
みたいにクォート内に改行を入れられないか?
なぜ awk ばかり数珠繋ぎ?
アルゴリズムを見直したほうがいいんじゃ?
- 18 :17 :2001/04/19(木) 18:07
- って >>15 で落ちがついてるじゃん。鬱だ…
- 19 :名無しさん :2001/04/19(木) 18:12
- メモリ追加しましょう
- 20 :19 :2001/04/19(木) 18:13
- つか、実行中に swap -l とか top とか見てる?
- 21 :19 :2001/04/19(木) 18:43
- swap -l ってSolaris固有か・・・
FreeBSD なら swapinfo 、 Linux はわからんかった
どれでも top ならみられるみたいだけどな
- 22 :???????????????B :2001/04/19(木) 22:11
- >>15
>>16
とりあえず1がアホなのは決定だが (質問してるのに必要な
情報を提示できないようでは、UNIX スキル以前の問題)、
A=`cat a.txt | awk '{ ... }' | awk '{ ... }' `
については最後の awk の出力がどれくらいあるか
わからないことには、何とも言えんぞよ。
- 23 :名無しさん@お腹いっぱい。 :2001/04/20(金) 00:39
- なーんでawkに(すぃかもパイプに)拘るかな。
以前の管理者が残したものを、わけがわからずそのまま使ってみた
という可能性を考えてみる。
- 24 :1 :2001/04/20(金) 08:35
- 激しく終了
- 25 :名無しさん :2001/04/20(金) 11:13
- おわりかい !
後日談もとむ。
- 26 :名無しさん :2001/04/20(金) 12:35
- 逃げるな
- 27 :名無しさん@お腹いっぱい。 :2001/04/20(金) 14:17
- 1が戻ってこないようなのでこのコピぺでも読んで我慢してくれ。
unixとは違うが、似たりよったりということで。
----------------------------------------
331 名前:いつでもどこでも名無しさん投稿日:2000/12/24(日) 14:19
教えてクン養成マニュアル
明日の「教えてクン」を目指す、若き戦士達に以下の文章を捧げる。
日々精進し、パソコンヲタクどもの親切を蹂躙してやれ。
1.努力を放棄すること
いやしくも「教えてクン」たるもの、努力をしてはならない。
過去ログを読んだり、検索してはいけない。
「英語は苦手なので、分かりません。」は、高く評価できる。
辞書片手にマニュアルやReadMeを読むなど、決してしてはならない。
他力本願と言われようと、自分で調べたり試行錯誤したりせず、
他人の努力の結果を搾取するのが、正しい「教えてクン」である。
また、「もう何が悪いのかサッパリ分かりません。」と言って
ふてくされるのも有効である。「サッパリ」という単語が
「やる気の無さ」を効果的に表現している。
「原因を特定するには、何をすべきでしょうか?」と訊いてしまうと
自己の積極性が現れてしまうので、「教えてクン」失格である。
332 名前:いつでもどこでも名無しさん投稿日:2000/12/24(日) 14:19
2.情報を開示しないこと
使用OSや、機器構成などの必須の情報を知らせてはならない。
マザーボード名やBIOSのバージョンも同様だ。
具体的なアプリ名やバージョンも隠蔽すべきだ。
「DVD再生ソフト」のように曖昧に表記しておけばよい。
反対に「前から欲しいと思っていた○○」とか「安売りされていた
○○」 等の「どうでもいい情報」は、どんどん書いてやれ。
トラブルの場合は、状況を正確に記述してはならない。
「なんだかうまく動きません。」とか「エラーが出ます。」等と
具体的なことは何も書かないことが重要である。
また、自分の試してみた事も具体的に書いてはいけない。
考えられる組合せのマトリックスを作成し、状況を整理するなど
もってのほかである。最悪の場合、それだけで問題が解決してしまう
こともあるのだ。
「いろいろやってみたけど、動きません。」が理想的だ。
333 名前:いつでもどこでも名無しさん投稿日:2000/12/24(日) 14:19
3.答える人間のことを考えないこと
「教えてクン」は、孤高の戦士である。相手のことを考えるようでは
教えてクン失格というものだ。
以下のような行動が、望ましい。
初心者であることを高らかに宣言し、初心者向けの丁寧で
分かりやすい説明を強要する。専門用語の使用を禁じておくと
さらに効果的である。簡潔な説明を禁じられたヲタクどもは、
同じ内容を説明するのに、何倍もの労力を強いられる。
自分は努力せず、相手には多大な努力をさせることこそが
「教えてクン」の真骨頂である。
マルチポストも有効である。そのBBSを信用していないことを
明確に示せる。「どうせ、お前らじゃ分からんだろう。」という
意志表示として高く評価できる。もちろんマルチポストの非礼を
あらかじめ詫びてはならない。それでは、単なる「急いでいる人」
になってしまう。それは、教えてクンではない。
質問のタイトルは、「教えてください。」で良い。
タイトルを読んだだけでは「何に関する質問」か全く分からない。
そういう努力は、答える人間にさせれば良いのだ。
とにかく、答える人間が答えやすいように気を使って質問しては
ならない。傲慢で不遜な態度が必須である。
「聞きたいことがあります。」など、プロの仕事であろう。
334 名前:いつでもどこでも名無しさん投稿日:2000/12/24(日) 14:20
最後に、言うまでも無いことだとは思うが、答えてくれた人達に
お礼の言葉を返すなど言語道断である。
せっかく「教えてクン」を貫いてきたのに、最後にお礼を言っている
ようでは、臥竜点睛を欠いていると言わざるを得ない。
質問だけしておいて、後はシカトが基本である。
上級テクニックとして、「そんなことはもう試しました。」とか、
「そこまで初心者じゃありません。」などと言って、回答者の
神経を逆なでしておけば完璧である。
以上のことを踏まえて質問すれば、君も立派な「教えてクン」である。
ビバ!教えてクン! 教えてクンに栄光あれ!!
http://www.fx.sakura.ne.jp/~kikumaru/bbs/article/n/nandemo/161/xqqrlz/index.html
- 28 :名無しさん@お腹いっぱい。 :2001/04/20(金) 14:39
- おたがいさまだ
- 29 :名無しさん@お腹いっぱい。 :2001/04/21(土) 09:33
- >>14があまりにも不憫だage
- 30 :1 :2001/04/23(月) 12:13
- 教えてクンですが。。。
ちょっと悲しかったです(泣
勝手に終わってるし(泣
- 31 :名無しさん@お腹いっぱい。 :2001/04/24(火) 08:15
- ごじつだんきぼんぬ
- 32 :名無しさん@お腹いっぱい。 :2001/04/24(火) 11:27
- >>30
>>24と>>1は別人なのか?
悲喜劇だな。
新着レスの表示
掲示板に戻る 全部 次100 最新50read.cgi ver5.26+ (01/10/21-)