2016-08-09 3 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; 
    } 
} 

Я намерен выборочно печатать строки файла с разделителями-пробелами. Пожалуйста, дайте мне знать, почему выше код дает ошибку при gawk -f FILE_Modifier.awk NRMIN = 90 FILE > NEWFILEAwk If-Elseif-If Block

Сообщение об ошибке

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

Используйте два слова: 'else if'. Awk не поддерживает 'elif' или' elsif' или такие варианты. Обратите внимание, что блок для 'if ($ 3 ==" Leu ")' никогда не печатает ничего и аналогично блоку 'else if ($ 3 ==" Val ") после того, как вы исправите его синтаксис. Это может быть просто из-за того, что вы минимизировали свой код для представления его на SO - вы работали над MCVE ([MCVE]), или это может быть недосмотр. –

+0

@EdMorton Исправлена ​​ошибка. Благодарю. – Frequency

ответ

1

Там нет elseif. Во всяком случае, вы можете переписать сценарий, как только:

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

Не используйте все имена переменных в верхнем регистре, чтобы избежать столкновений с именами встроенных. Устанавливайте переменные вверх, используя -v, если у вас нет особых причин.

Смежные вопросы