• ベストアンサー

awkのフィールド数制限について質問です

ご存知の方がいましたら、教えて下さい。 SunOS5.8でawkコマンドを実行すると、 1レコードが100フィールドを超えると、 「フィールド指定が多すぎます」のエラーがでるようなんですが、 SunOS5.8のawkは、1レコードが100フィールドまでした対応してないんでしょうか? また、nawkの場合の1レコードのフィールド数制限はあるのでしょうか? もし、パッチなどをあてて対応できるんであれば、教えて下さい。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

具体的な数字は色々ありますが、事実上無制限といえるのはgawkくらいのものだと思います。 docs.sun.com: Solaris 8 (SPARC Platform Edition) 2/04 Release Notes http://docs.sun.com/app/docs/doc/817-5172/6mkl83m8j?a=view を見る限りでは、nawkにもその種の制限はあるようです。 具体的にいくつなのかはわかりませんが。 > Workaround: Contact your support channels to obtain the Solaris patch that increases the awk and nawk field limitation. というのがそのページの末尾にあるので、パッチは存在しているかもしれませんね。 というか、商用UNIXなんだから、なんでサポートに訊かないんですか?

oyaji111
質問者

お礼

ご返事が遅れましてすいません。 大変助かりました。 ありがとうございました。

関連するQ&A

  • awkコマンドについて

    教えてください。 Solaris9を使用しています。 SYSTEM Vでawkコマンドを使用しているシェルをSolaris9上で実行すると awk: レコード `従業員番号 従業員氏名 ...' においてフィールド指定が多すぎます。 のMSGが表示されてしまいます。 Solaris9では、1レコードの長さやフィールド数に制限があるのでしょうか? 行っている処理はテキストファイルのタブをカンマに変換です。 SYSTEM V上では正常に動作します。 よろしくお願いします。

  • perlでawkのようなことはできるでしょうか?

    perlなど初心者です。 awkでレコードのフィールドを$1、$2などと参照できるのが便利だなと感じているのですが、perlでもコマンドラインで同じ事をするにはどうすればよいでしょうか?

    • ベストアンサー
    • Perl
  • awkについて

    度々すみません。awkについて先程教えて頂いたものですが、少し変更しようと思っているのですが上手くいきません。変更していることは、以下の○○○の内容を固定ではなくてコマンドラインから渡したいです。 ウェブで調べたところARGVというのを使うことはわかりました。そこで"○○○"からARGV[0]に変更してコマンド実行時に引数を与えたのですが、「○○○というファイルを開けません」というエラーになってしまいます。実行したのはawk -f awk data.csv ○○○です。なぜ引数をファイル名だと認識してしまうのでしょうか。初歩的で申し訳ありませんが教えて下さい。 BEGIN{ goukei = 0 count = 0 } { #フィールドの8番目の条件が一致する場合のみ9番目を合計 if($8=="○○○"){ goukei += $9 count++ } } END{ if(count!=0){ print "合計は", goukei print "平均は", goukei/count } else{ print "条件に一致するのない” } }

  • awkについての質問

    実行環境:AIX5.2 シェル:Ksh 以下の2点をシェル内部で実行しているのですが、上手くいきません。 ご教授お願いいたします。 (1)System関数の実行結果(標準出力)をTERM上に表示させず、処理をしたい。 #!/usr/bin/ksh awk '{ system("ls -l") ###具体的にはls -l 結果の2行目、第一フィールドをawk内で変数に格納 }' (2)変数に格納された文字列のバイト数を取得し、変数に格納したい。 length()は文字数を取得できる事は理解したのですが、文字数ではなく、文字列のバイト数を取得したいです。awkに実装されている関数などありますでしょうか?

  • awkのsplitについて

    awkにつて質問いたします。 awkで項目を特定する時$1等指定しますが、最大で$199までしか対応していない事が分かりました。 そこでawk内部でsplitを使う事にしました。(この場合、200項目目以上可能) 項目の特定、変更は分かりましたが、レコード単位での出力("print 配列"等)の方法分かりません。 簡単に言いますと、 1.あるレコードのある項目を変更したい 2.変更後、レコード単位でファイルに出力したい ※項目は区切り文字で仕切られている ※項目は200以上ある です。 for文で回すのは最終手段にしたいと考えています。 ※この方法でしたら、実現しています。 ご存知の方、ご教授願えますか? 宜しくお願いいたします。

  • awkの使い方について教えてください。

    awkとperlなどの初心者です。 使い方が分かっていないのですが、 例えば出力のフィールドセパレータを,に変更するには どうすればいいでしょうか? awk '{OFS=,;print}' fileなどとやってみますが、 うまくいきません。2つ以上のコマンドを実行するときの 文法がわかっていないような気がするのですが。 あとperlでよくみかけるperl -neのnは何でしょうか? man perlとやってみても-wと-eの意味しかのっていなくて なからないのですが。ご教授下さい。

  • アクションクエリでレコード数を制限して実行したい

    Access2002でADOです。 数万レコードになるデータを更新しようとすると途中でエラーになるようです。 以前、そういう場合はレコード数を制限して、100レコードずつとか200レコードずつとかそういう単位で処理していく方法が書かれていたような気がします。 そのときは気にもとめていなかったのですが、今になって必要になってきました。 この処理は具体的にどのように実行すればいいのでしょうか?

  • Solarisのawkでの正規表現の使い方について

    ご存知でしたら、教えてください。 Solarisのawkで、変数に対しての比較に正規表現が使えないのですが、 よい方法をご存知の方がいましたら、教えて下さい。 nawkなら、上手くいくのですが、awkでは無理なのでしょうか? また、Linuxのawkなら、上手くいきました。 よろしくお願いします。 例)下記の場合、./test.shを実行すると、test.awkの正規表現を使用している部分[if ( $7 ~ HENSU )] でエラーになってしまいます。 --------------------test.shの中身-------------------- #!/bin/sh HENSU="3A" cat testdt.txt | \ awk -f test.awk HENSU=${HENSU} exit 0 ----------------------------------------------------- --------------------testdt.txtの中身-------------------- aaaaa bbbb ccc ddd eeeee ffffff gg3Aggggg hhhhhhh iiiii aaaaa bbbb ccc ddd eeeee ffffff gggggggg hhhhhhh iiiii aaaaa bbbb ccc ddd eeeee ffffff gggggggg hhhhhhh iiiii ----------------------------------------------------- --------------------test.awkの中身-------------------- BEGIN{ FS="\t" } { if ( $7 ~ HENSU ) { print $0 } } -----------------------------------------------------

  • access2000で、テーブルのレコード最大数の制限

     access初心者です。access2000を使用しています。テーブルのレコードの最大数を制限したいと思っています。例えば1つのテーブルの最大レコード数を100件に設定し、そのテーブルのみ101件目のレコードを入力したらエラーメッセージが出るようにできませんか? どなたかご存じの方よろしくお願いします。

  • フィールド数の多すぎる・フィールド数が一定でないテーブルのデータ結合の仕方?

    私は、accessについてあまり詳しくないものなのですが、仕事上50近くあるデータを一つにまとめたいんです。 データは2つありまして、 1.それぞれのテーブルが微妙にフィールド数が異なる場合の結合  例)・Aのテーブルのフィールド名     名前 クラス名 出身県 出身コード 血液型 性別        ・Bのテーブルのフィールド名    名前 出身県 血液型 性別    ・Cのテーブルのフィールド名    名前 クラス名 出身コード 血液型    ⇒このように微妙に異なる。しかもレコード数がかなり多いのです。これは、ユニオンクエリは使えないですよね?何かいい方法はないでしょうか? 2.テーブルの構造は同じなのですが、フィールド数が多くてユニオンクエリを使おうとすると、『フィールド数が多すぎる』とエラーメッセージがでてしまう。この場合の対処方法でいいのはないでしょうか? なにぶん、私はaccessをあまり使わないのでわかりにくい質問だと思いますが、どなたかすみませんが教えてください。お願いします。