2016-08-09 6 views
0
NR>NRMIN{ 
    if($3 == "Leu") { 
     if($4 == "CD1" || $4 == "HD11" || $4 == "HD12" || $4 == "HD13") { 
      next; 
     } 
    } 
    elseif($3 == "Val") { 
     if($4 == "CD1" || $4 == "HD11" || $4 == "HD12" || $4 == "HD13") { 
      next; 
     } 
    } 
    else { 
     print; 
    } 
} 

私はスペース区切りのファイルの行を選択的に印刷するつもりです。 何elseifがないときgawk -f FILE_Modifier.awk NRMIN = 90 FILE > NEWFILEAwk If-Elseif-Ifブロック

エラーメッセージ

gawk: FILE_Modifier.awk:7:  elseif($3 == "Val") { 
gawk: FILE_Modifier.awk:7:      ^syntax error 
gawk: FILE_Modifier.awk:12:  else { 
gawk: FILE_Modifier.awk:12: ^syntax error 
+1

「エラーが発生しました」と言っているのではなく、質問にエラーメッセージを含めておけば非常に便利です。本当に**変数代入 'NRMIN = 90'の途中に空白を残しましたか?あなたは本当に** elseとifの間にスペースを入れていませんでしたか? –

+1

2つの単語を使用します: 'else if'。 awkは 'elif'や' elsif'やそのようなバリエーションをサポートしていません。 'if($ 3 ==" Leu ")'のブロックは何も印刷しないことに注意してください。また、 'else if($ 3 ==" Val ")ブロックと同様に構文を修正してください。それはちょうどあなたがあなたがMCVE([MCVE])に向かって働いていたか、それとも監督かもしれないので、それをSOに提示するためのコードを最小限に抑えたからかもしれません。 –

+0

@EdMorton問題を修正しました。ありがとう。 – Frequency

答えて

1

上記のコードはエラーを与えている理由を私に知らせてください。とにかく、あなたは同じようにスクリプトを書き換えることができます。

awk -v nrmin=90 '(NR > nrmin) && !(($3 ~ /^(Leu|Val)$/) && ($4 ~ /^(CD1|HD11|HD12|HD13)$/))' file 

は、組み込みの名前の衝突を避けるために、すべて大文字の変数名を使用しないでください。具体的な理由がない限り、変数を先頭に設定してください(-v)。