重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

echo $var | awk '{
for (i = 0; i < NF; i++) {
if ($i == "AAA") {
j = i+1; print $j ; exit;
}
}
}'
として変数1"$var"から"AAA"という文字列を抜き出しているのですが
$varに二個以上のAAAが存在するときに
一つめのAAAとマッチしたら終了としたいのです
どの用にしたらよいでしょうか?
ご教授お願いします。

A 回答 (2件)

>>とかあったら、どんな出力が欲しいのでしょうか?


>BBBです。

であるなら、今のスクリプトでできてませんか?
少なくともわたしが試したところではBBBが
でてきましたけど。

補足の内容から判断すると、
>"AAA"という文字列を抜き出しているのですが
じゃなくて、AAAを鍵にしてその次にくる
フィールドを抜き出してますよね。

なら for ループは
for (i=1; i<NF-1; i++) {
でしょう。
<=NFだと、最終フィールドにAAAがあると
空文字列が出力されます。
それでいいというならまあいいですけど。

で、うまくいかないパターンがあるなら、それを提示してもらえませんか?
    • good
    • 0
この回答へのお礼

確かに。
うまくいきますね・・・(^^;

抱えていた問題の原因は
別な部分にありました。

申し訳ありません。
ありがとうございます。

お礼日時:2007/10/12 14:13

ちと疑問に思ったのですが、



> for (i = 0; i < NF; i++) {

なぜフィールド0(レコード全体)から始めているのか。最終フィールドを除外しているのか。

> if ($i == "AAA") {
> j = i+1; print $j ; exit;

なぜ比較に使ったフィールドの次のフィールドを
出力しようとしているのか?

がナニを目的としているのかがわかりません。

たとえば $var に
AAA BBB AAA CCC AAA
とかあったら、どんな出力が欲しいのでしょうか?

この回答への補足

> なぜフィールド0(レコード全体)から始めているのか。最終フィールドを除外しているのか。

これは特に意味はありません。
for (i = 1; i <= NF; i++)のほうがいいですね。
失礼しました。

>たとえば $var に
>AAA BBB AAA CCC AAA
>とかあったら、どんな出力が欲しいのでしょうか?

BBBです。

補足日時:2007/10/11 11:18
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!