■掲示板に戻る■ 全部 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さんみたいに。
続きを読む
掲示板に戻る 全部 次100 最新50read.cgi ver5.26+ (01/10/21-)