• 締切済み

awkコマンドについて

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

みんなの回答

  • e-marimo
  • ベストアンサー率24% (9/37)
回答No.1

OS の違いというよりも awk のバージョンや種類(gawk,nawk,awkなど) を合わせて実行してみてください。

kobu_nao
質問者

お礼

お返事、遅くなりましてすみません。 アドバイスありがとうございます。 gawkなど試してみたいと思います。 ありがとうございました。

関連するQ&A

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

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

  • コマンド制限・コマンド履歴

    こんにちは。 システム管理のお仕事をし始めて4ヶ月ほどの新米です。 課題ということで、Solaris上でのコマンド制限について調べています。 特定のIDに対してコマンドを制限し、さらに履歴もとるという内容。履歴に関してはリアルタイムでなくても良いということです。 一般ユーザのコマンド制限になります。 一番いいのはrbashのようなものなのですが、共通環境がCシェルなので、rbashの使用は難しいようです。 質問も頼りないものですが、よろしくお願いいたします。

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

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

    • ベストアンサー
    • Perl
  • 【シェル】whileコマンドについて

    【シェル】whileコマンドについて OS:Solaris10 SH:Bシェル お世話になります。 whileコマンドにてテキストから、先頭に"#"(シャープ)が付いている行と、 空白行以外を読み込ませたいです。 ところが、メイン処理にawkコマンドを入れると、テキストを読む時点で、 行全体ではなく、指定したフィールド内の文字列を読みにいくため、 "#"(シャープ)が付いている行を無視することができません。 ====== while.sh ====== #!/bin/sh while read LINE do echo $LINE | awk '{print $2}' done < list.txt | grep -v "^#" | grep -v "^$" ====================== ------ list.txt ------ 1 2 3 #4 5 6 7 8 9 ---------------------- ****** 出力結果 ****** 2 5 8 ********************** ** 出力させたい結果 ** 2 8 ********************** whileコマンドのオプション等で、テキスト内に特定の記号がある行は 無視して読み込ませる方法がありましたら、ご教授ください。 宜しくお願い致します。

  • Bシェルのawkコマンドについて

    Bシェルのawkコマンドについてですが、例えばプロンプトから % ls -l hoge.txt | awk '{print $5}' と入力すると、hoge.txtのファイルサイズが出力されますが、同様のことをBシェルの中で行おうと思っています。 下記のように、配列arrayにはスペース区切りで3つのデータが入っており、N番目のデータを取得したいという場合に、Nに変数を使用して取得する方法がわかりません。 #!/bin/sh array="AA BB CC" num=3 # CCを取得したい echo $array | awk '{print $num}' 上記で実行すると、"AA BB CC"のようにすべて出力されてしまいます。awkで出力する箇所を${数値}で指定すればうまくいくのですが、ランダムで決めた数値(1~3)をnumに入れて取得したい場合、このようなことは可能でしょうか。 もし不可能な場合でも、awk以外に何かコマンドがあればご教授願います。なお、作成するのはBシェルになります。

  • awkコマンドに引数を渡す方法

    awkコマンドに対して引数を渡す方法が知りたいです。 例えば以下のようなリストファイルがあったとします。 --------------------------------------- % cat test.lst 454 100 37536 200 32432 300 34q2 400 --------------------------------------- そこで以下のシェルを実行すると --------------------------------------- #!/bin/sh for VAL in 100 200 300 do CNT=`cat test.lst | awk '$2 == $VAL {print $1}'` echo "$VAL : $CNT" done --------------------------------------- awkコマンド内の$VALが引数ではなく文字列として認識されてしまうため、 出力結果が 100 : 200 : 300 : となってしまいます。 100 : 454 200 : 37536 300 : 32432 という結果を出力したい場合(awk内の引数を有効にする場合)どうすればよいでしょうか? awkを使用しない方法もあるかと思いますが、今回はawkを使った方法を知りたいです。 宜しくお願い致します。

  • システムコマンドをawkで使用?

    システムコマンド(たとえばechoなど)を、awkで使用する方法ってあるのでしょうか? 人に聞かれたので、いまいちどういった状況を指しているかがわかりませんが、、、 ご存知の方いらしたらお願いします。

  • awkについての質問

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

  • awkで計算した結果を反映させる方法

    初心者です。おしえてください。 awkで次のようなことをするにはどうすればよいでしょうか? コーディング例を教えてください。 テキストファイルのレコードの一部が数値項目で、 その数値項目から3を引いた結果をその数値項目に置換えたいです。 (区切り文字がない1レコードのみが入ったテキストファイルを読み込みます。) 例) aaaaa10000bbbbb20000 6~10カラムの「10000」から-3をした「9997」を置き換えて、 aaaaa09997bbbbb20000 としたいです。 awkで無くても、Unix(HP-UX)のコマンドやBシェルで可能であれば、 構わないのでおしえてください。 よろしくお願いいたします。

  • awk内でsystem関数を使用しfunction

    環境:AIX5.2 シェル:ksh を使用してシェルを作成しています。 awk内でsystem関数を使用しfunctionを呼び出す事は可能でしょうか? 実現したい内容は以下です。 ・awk内で同一シェルに記述されたfunctionを呼び出す ・functionを呼び出す際には引数を渡す 記述イメージ的に以下のような感じでスクリプトに記述していますが、 system関数内で呼び出そうとしているfunctionをfunctionとして 認識できないのでは??っという疑問を持ち始めてます。 function hoge{  HOGE=$1 echo ${HOGE} } awk'{ BEGIN{FS=":"} system(hoge AAA) }'