- ベストアンサー
awkで一つマッチしたら終了させる
echo $var | awk '{ for (i = 0; i < NF; i++) { if ($i == "AAA") { j = i+1; print $j ; exit; } } }' として変数1"$var"から"AAA"という文字列を抜き出しているのですが $varに二個以上のAAAが存在するときに 一つめのAAAとマッチしたら終了としたいのです どの用にしたらよいでしょうか? ご教授お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (1)
- sakusaker7
- ベストアンサー率62% (800/1280)
関連するQ&A
- シェルスクリプトで、空白(スペース)を含む変数をawkに渡したいのです
シェルスクリプトで、空白(スペース)を含む変数をawkに渡したいのですが、どうしたらいいでしょうか? 例えば、以下のようなtest.shというファイルを作ったとします。 --------------- #!/bin/sh AAA="x y" echo "" | awk '{print $AAA}' -------------- としたとき、$AAAが正常に出力できません。(なお、echo "" は、awkを走らせる為の単なるダミーです。) printの部分を ・awk '{print '$AAA'}' ・awk '{print "'$AAA'"}' などともしてみましたが、ダメでした。どのようにすればうまくいくでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
- [awk]マッチしたものをすべて取り出したい
awk(GNU awk)を使って正規表現にマッチした部分文字列を最初にマッチしたものだけでなく、すべて取り出したいと思っています。 grepコマンドを使うと次のように簡単に取得できるのですが、awkだけで実現する場合どのように記述したらよいのでしょうか? ■例 $ echo 'abcdebx' | grep -o 'b.' 結果: bc bx # 最初にマッチしたものだけなら取得できる $ echo 'abcdebx' | awk 'match($0, /b./) {print substr($0, RSTART, RLENGTH)}' 結果: bc ■環境 GNU Awk 4.0.1 よろしくお願いします。
- ベストアンサー
- Linux系OS
- 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 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つになってしまいました。すみません。 よろしくお願いいたします。
- ベストアンサー
- その他(プログラミング・開発)
- UNIXで数字の文字列を、数値に変換するには?
UNIXで、数字のみの文字列を、その文字列で表される数値に変換して変数に代入したいのですが、どうすればいいでしょうか? つまり、 VALUE=`echo 22j4444j33 | awk -F'j' '{print $1}'` <VALUEに入った"22"を22の数値に変換> exit $VALUE というようなことがしたいです。 よろしくお願いします。
- ベストアンサー
- その他([技術者向] コンピューター)
- 今、awkを使ったシェルスクリプトを作っています。
今、awkを使ったシェルスクリプトを作っています。 aaa bbb ccc ddd ee ff gggg hhh といったファイルから、 bbb,ccc ff,gggg を取り出したいと思っています。 そこで、以下のコマンドをwhileでまわして、$iを増加させることにより、 ファイルを一行ずつ読み取り、目的の列を取り出したく思っています。 A=`cat sample.txt|awk 'NR == $i {print NR, $2;}'` B=`cat sample.txt|awk 'NR == $i {print NR, $3;}'` ところが、awkコマンドの中の$iがシングルクォーテーションでくくられているので、 変数展開されなくて困っています。 何かよい方法があればご教授いただけますでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
- パターンマッチで変数でマッチさせるには?
教えて下さい。 パターンマッチで変数$aaa(中身は2バイト文字)でマッチしたいのですが どう書いたらいいんでしょう? 以下のように書いたらマッチしませんでした(;ω;) if($value[5] =~ /^($aaa)/)
- ベストアンサー
- CGI
- 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)でできるのであれば、お願いします。
- ベストアンサー
- その他([技術者向] コンピューター)
- 文字列から特定の文字を抜き出す
こんにちは。 シェルスクリプトで文字列から特定の文字を抜き出し、 変数に入れたいのですが、うまくいきません。 申し訳ありませんが、アドバイスをお願いいたします。 文字列 $moji=aaa_bbb_ccc (文字は変動します) $a=aaa $b=bbb $c=ccc と"_"毎に変数に代入したい。 echo $moji | awk -F_ '{print $2}' で文字を標準出力に取り出すことはできるのですが、 そこから変数に代入する方法がいまいち分かりません。
- ベストアンサー
- その他(OS)
- awkのセパレータ指定について
awkのセパレータ指定について教えてください。 以下のようなファイルがありそれを'||'区切りで出力したいです。 下記のような指定をしてみたのですが、 うまくいきませんでした。 cat text | awk -F '||' '{print $1}' [test.txt] aaa||bbb||ccc [期待する結果] print $1 → aaa print $2 → bbb print $3 → ccc どなたか教えてください。 よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
お礼
確かに。 うまくいきますね・・・(^^; 抱えていた問題の原因は 別な部分にありました。 申し訳ありません。 ありがとうございます。