• ベストアンサー

awkについて

質問させてください。 ファイル内容が 123456789,10 とカンマで区切られているものがあるのですが、 カンマより左側を変数に設定したいのです。 awkによって検索したものを変数に設定することは可能でしょうか。 分かりにくい文で申し訳ありませんが、ご回答お願い致します。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4856/10272)
回答No.2

「変数」とはシェル変数にセットしたいんですかね。だとすると、 VAR=`awk -F, '{print $1}' file` awk 以外に、sed 、cut 、expr などのコマンドでも出来ます。

tanamochi
質問者

お礼

notnotさん。 期待通りの結果を得られました。 -Fのあとのフィールド区切り文字は''を付けなくても良いみたいですね。 sed,cut,exprでも出来るのですか。 今度試してみようと思います。 分かりにくい文の中的確なアドバイスをありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • north_2nd
  • ベストアンサー率22% (55/243)
回答No.1

定数を変数に設定しようとしているように読めてよくわからないのですが。。。。 BEGINで区切り子をカンマに設定(FS="," だっけ?)して$1を変数に代入するというので所望の結果になりそうな気がしないでもないですがどうでしょうか?

tanamochi
質問者

お礼

north_2ndさん。 分かりにくい文で本当に申し訳ありません。 そうです。定数をシェル変数に設定する処理でした。 BEGINを使った処理も私の期待通りの結果を得られました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • awkないでの変数について

    cshでスクリプトを書いています。 awk外で設定した変数をawk内で使用したいのですが、 できないのでしょうか。。。 使用できるならどのように使用できるのでしょうか。 どなたか教えて下さい。

  • awk の使い方

    sample.txt ファイルには   "中村" "08/01/80" "03.1234.5678"   "木村" "08/01/81" "06.1252.2536" のような情報があります。 そこの3番フィールドが電話番号ですので、awkで検索しようと思っています。 それで、 awk -v ARGU="$NUM" ' { VAR=substr($3,2,(length($3)-2)) if ( ARGU == VAR ) {print} }' /sample.txt のようにして、検索をかけようとしましたが、できません。 どこが間違っているのか教えてください。 awkの他の方法があるとか、違うもの(sed or grep)でできるのであれば、お願いします。

  • AWkの配列についてのデバッグ

    awkプログラミングを勉強しています。配列を使ったスクリプトがうまく動作しないのでネットで検索していると"配列を使っていてうまく動かない場合、awk コマンドの引数に --dump-variables を指定することで、利用している変数および配列の一覧を awkvars.out というファイルに出力することができます。” という書き込みを見つけました。この機能を使用してみたいのですが、うまくいきません。 スクリプトに #!/nin/awk -f --dump-variables としてもなにも特別な動作はしてくれませんでした。

  • 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 match関数

    awkのmatch関数で、 awk -F":" 'match($2, "/hogehoge/") {print $0} ファイル名 は、動きます。 たとえば、検索条件に"/"が入ってるときは、 awk -F":" 'match($2, "#hoge/hoge#") {print $0} ファイル名 ってやりたいんですが、動きません。 こういうもんなのですか?? awk -F":" 'match($2, "/hogehoge/i") {print $0} ファイル名 も、気持ち的に動いてほしいですが、これも、動きません。 こういうもんなのですか?? tolower($2) を使えば、それですみますが・・・ 質問が、2つになってしまいました。すみません。 よろしくお願いいたします。

  • awkについて

    awkについて 今とあるファイルの/var/tmp/test 中の検索についてawkを使用しています。 123 abc 123-m 333 aaa-xx 1qwoko などタブキーで区切られています。 cat /var/tmp/test grep 123 | awk '$=="123"{print $2}' とやった場合存在するので 結果がでるのですが、その結果がない場合"NG"など文字列を出したいのですがどうすればいいでしょうか?

  • awk の使い方

    sample.txt ファイルには   "中村" "08/01/80" "03.1234.5678"   "木村" "08/01/81" "06.1252.2536" のような情報があります。(フィールドの区別はTabです) そこの3番フィールドが電話番号ですので、awkで検索しようと思っています。 それで、 $ shell 06.1252.2536 #!/bin/sh NUM=$1                    #引数をNUMに代入 awk -v ARGU="$NUM" ' { VAR=substr($3,2,(length($3)-2))      #「"」を取り除いた if ( ARGU == VAR ) {print}         #電話番号と比較 }' /sample.txt のようにして、検索をかけようとしましたが、できません。 どこが間違っているのか教えてください。 awkの他の方法があるとか、違うもの(sed or grep)でできるのであれば、お願いします。

  • awkからcshへの複数値返却

    スペースデリミタのデータファイルをcsh+awkで解析する機能を作っているのですが、shのreadを使った場合のように、複数の値をshell側に返す方法がわかりません。 例)shの場合(本当はva1,val2は1つの変数に設定したいので、あくまで例) ------------------------------------- % less list KIND1 YES NO KIND2 NO YES % less echo_hoge.sh #!/bin/sh while read val1 val2; do ←★このval1 val2に設定する手段がcshで見つからない echo $val1 $val2; done < list ------------------------------------- cshでスペースデリミタでかつ使用不可文字なしのデータファイルを行単位に処理するのは難しいと考え、awkを使って処理しようと考えたのですが、awkだと1つの処理結果しかshell変数に設定できない(ように思える)ため、困っています。 例)csh+awk ------------------------------------------------ set kind1 = `cat list | awk '{ if ( $1 == "KIND1" print $2 $3)}'` set kind2 = `cat list | awk '{ if ( $1 == "KIND2" print $2 $3)}'` ------------------------------------------------ 上記のように2回読まずにうまくshell変数に設定する方法がないか教えてください(sh使用は政治上の理由でNGです)。 よろしくお願いします。

  • awkコマンドについて

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

  • unix awkコマンド 複数区切り

    カンマ2つ(,,)+文字の抽出方法がわかりません・・・。 例: ファイル内(下記2行)に対して 12,34,,567@89 1,2,34,,567@89 1行目2行目ともに「567」が表示したいです。 # ”カンマ2つを一つの文字列”だけだと「awk -F",,"」でいけますが、+文字列がどうやってもできません。。