• ベストアンサー

AWKの配列内データの処理について

AWKを使用して入力ファイルの1行内の単語に対して条件チェックするには for( i=1 ; i<= NF i++ ){    if( $I == chek_word )       処理 } とすればできるのはわかるのですが、 一旦、配列の中に格納した文字列に対して上記の処理と同様の処理をするにはどのようにすればいいのでしょうか? 例えば data_line[$1] = $0; として配列data_lineに格納した1行そのままのデータに対して1番上の行全体にわたる単語の条件チェック をおこないたいのですが、どのようにすればいいのかよくわかりません。 どなたかご存知の方アドバイスをお願いします。

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

  • ベストアンサー
  • terra5
  • ベストアンサー率34% (574/1662)
回答No.1

>data_line[$1] = $0; $1が同じだと上書きされますがいいんでしょうか? まあ、それはそれとして、 for ( line in data_line ) { nf = split(line, term, FS); for ( i=1; i<nf ; i++ ) { if ( term[i] == check_workd ) { // 処理 } } } のようなことをしたいという意味でいいんでしょうか。 チェックしてませんので、間違いあるかも知れませんので、 関数等調べてからお使いください。

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4900/10361)
回答No.3

#2です。 つい間違ってしまいました。 for(line in data_line) {  $0=data_line[line]  for(i=1;i<=NF;i++){   if($i==chek_word)      処理  } } です。#1の方の回答も nf = split(data_line[line], term, FS); です。

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

#1の方の回答で >for ( i=1; i<nf ; i++ ) { は for ( i=1; i<=nf ; i++ ) { ですね。 他の方法としては、 for(line in data_line) {  $0=line  for(i=1;i<=NF;i++){   if($i==chek_word)      処理  } } この場合、$0 が破壊されるので必要なら事前に退避してあとで戻す必要がありますが、多分END{ }内での処理でしょうからそのままでいいでしょう。

関連するQ&A