ファイルがかなり長いです。最長行の長さは4609です。cshell:バックティック内の大きなテキストファイルでcatを実行すると「単語が長すぎます」
% perl -nle 'print length' ~/very_large_file | sort -nu | tail -1
4609
ここで、cat ~/very_large_file
を実行すると正常に動作します。私は内側のバッククォートを置くときしかし、それは言葉が長すぎる」というエラー
% foreach line (`cat ~/very_large_file`)
Word too long.
% set x = `cat ~/very_large_file`
Word too long.
は、このようなファイルの各行を処理するためにcsh
でバッククォートを使用する代わりはあります提供しますか?
更新私の問題は別の言語を使用して解決されましたが、まだ失敗したcshの理由が見つかりませんでした。 ARG_MAXを見つける方法を説明しているthisのページを見つけました。特に、getconf
コマンドが便利です。もちろん、私はです。この制限が根本的な原因であるかどうか、そしてcsh
以外の言語に制限が適用されるかどうかはまだ分かりません。です。
各行で何をしていますか? (必然的に、誰かがあなたにhttp://www.faqs.org/faqs/unix-faq/shell/csh-whynot/を指摘するでしょう) –
cshまたはtcshを使用していますか?私は1つの4609文字の行を持つファイルに対してtcsh 6.17.02を使用してこれを試しましたが、 "単語が長すぎます"というエラーはありませんでした。ファイル全体を '$ x'にスラーピングしても問題は残るかもしれません。しかし、あなたはPerlを持っているので、それを使わないのはなぜですか?これは、cshよりもはるかに優れたスクリプト言語です。 –
私はこのシェルスクリプトを維持する必要があり、正直なところ私はそれをやるのに苦労している! foreachループは大部分のテキスト操作を行っていますが、このバグは最近になって現れました...はい、私はperlですべてを書き直すつもりですが、 'cat'演算を代用する方法があればバグのないものであれば、短期間で大きな助けになるでしょう。 – Unos