3

非常に大きなテキスト ファイルを読み込んで解析しようとしています。ロードは問題ありませんが、1 行に 2908778 文字の特定の行があります。

これにより、スクリプトでエラーが発生しています。

以下のスクリプトでは、すべてのロジックを削除して、すぐに行を読みました。また、有効な行をすべて削除し、非常に長い行を 1 つのテキスト ファイルに残しました。実行すると、次のエラーが表示されます。

$ dowhiledebug.sh dump.txt
dowhiledebug.sh[6]: no space
Script Ended dump.txt

実際のスクリプト:

 #!/bin/sh
 filename=$1
 count=1
 if [ -f ${filename} ]; then
    echo "after then"
    while read line;
            do
            echo "$count"
            count=$((count+1))
            done < $filename
 else
    echo "Could not open file $filename"
 fi
 echo "Script Ended $filename"

更新 (2013-01-17)

フォローアップの質問: ksh 変数が受け入れる最大文字数を増やすことは可能ですか?

4

2 に答える 2

6

kshのOSとバージョンは何ですか?あなたecho ${.sh.version}と価値を得ることができますか?もしそうなら、上記の質問に含めてください。それともこれはpdkshでしょうか?

(( i++ ))数学の評価をサポートする最新のkshを想定して、球場に入るテストを次に示します。

#100 char var
var=1234578901234456789012345678901234567890123456789012345789012344567890123456789012345678901234567890

$ while (( i++ < 10000 )) ;do  var="$var$var" ; print "i=$i\t" ${#var} ; done
i=1      200
i=2      400
i=3      800
i=4      1600
i=5      3200
i=6      6400
i=7      12800
i=8      25600
i=9      51200
i=10     102400
i=11     204800
i=12     409600
i=13     819200
i=14     1638400
i=15     3276800
i=16     6553600
i=17     13107200
i=18     26214400
i=19     52428800
i=20     104857600
i=21     209715200
i=22     419430400
-ksh: out of memory

$ print -- ${.sh.version}
Version JM 93t+ 2010-05-24

そして、それはサポートできる環境の全体的なサイズです。コマンドライン環境とプログラム名の後の「単語」を扱う場合、全体のサイズに関係なく、単語の数に制限があります。

一部のシェルのマニュアルページには、のようなものが表示される可能性のあるセクションLIMITSがありmax-bytes 200MB, max-args 2048ます。この情報は別のセクションにある可能性があります、それは間違いなく私が含めた異なるラベルと異なる値を持っているでしょう、またはそれはまったくないかもしれません、したがって上記のコードループなので、注意深く見て、この情報のソースを見つけたら、このQに回答を追加するか、これを更新してください。

stdのbash 4.4マニュアルページにはこの情報が含まれていないようで、kshドキュメントを常に見つけるのは困難です。を確認man kshし、文書化された制限を見つけることができることを願っています。

IHTH

于 2013-01-17T04:23:47.923 に答える
1

シェルの制限は、C コマンド ラインの最大値の制限です。情報を引き出す小さなプログラムを次に示し/usr/include/limits.hます。

cpp <<HERE | tail -1
#include <limits.h>
ARG_MAX
HERE

私は(256 * 1024)または262144文字を与えます。

C コンパイラがインストールされていない場合は機能しませんが、おそらく同様の制限です。

于 2013-01-17T03:07:48.803 に答える