2017-08-15 16 views
0

単語の途中にいくつかの文字セットをマッチさせるつもりで、単語の開始と終了をチェックしますそれ以外の場合は私の目標は無効です)最初または最後の文字に一致します。そして、私はそれがAWK印刷が指定されていないときに、出力ファイルにコードの行を出力する

$1~/xampl/ 

私は完璧な作品を作ってみたコードの行を使用して、単語に存在する場合、

awk -f awkfile inputfile > outputfile 

を使用している場合を除き、私は理想的に、ちょうどそれがインクリメントしたい存在をチェックし、印刷されませんが、それが一致するたびに印刷されます...私は何かが不足していますか?

+0

ここでその動作を再現することはできません。おそらくあなたのawkスクリプトの別の部分がそれをやっているのでしょうか? –

答えて

1

awkプログラムは、この構造に従ってください:CONDITIONまたはアクションのいずれかがオプションである

CONDITION { ACTIONS } [ CONDITION { ACTIIONS } ... ] 

。条件が欠落している場合は、次のように:

awk '{ print }' 

awkはtrueことや入力のすべての行に{ print }を実行するための条件を仮定します。

アクションは(あなたの場合と同様に)このように、不足している場合:

awk '$1~/xampl/' 

awkは{print}あるデフォルトのアクションを、実行されます。印刷するだけでインクリメントしたくない場合は、次のようにアクションを追加する必要があります。

awk '$1~/xampl/ { c++ }' 
0

あなたの質問が正しく理解されていれば、最初のフィールドの中央に表示されている場合にのみ単語に一致する式が間違っています。あなたは接尾辞のインデックスが2つずれています。それは次のようになります。はにを短縮することができ

#!/usr/bin/awk -f 
"xampl"!=substr($1, 1, length("xampl")) && "xampl"!=substr($1, length($1)-length("xampl")+1, length("xampl")) && $1~/xampl/ {exists+=1} 

#!/usr/bin/awk -f 
$1~/.+xampl.+/ {exists++} 

しかし、副作用を持っていないこれらのスクリプトは、すなわち、すべてのあなたがインクリメントされない変数が、あなたは決してそれを印刷する。これはあなたが私たちに見せていないスクリプトの他の部分にあなたのエラーが実際にあると私に信じさせます。それにもかかわらず、あなたのawkプログラムは、ファイルから呼び出されたときに異なった動作をするべきではありません。

関連する問題