2012-04-27 2 views
0

Эта команда awk будет делать «материал 1» для каждой строки, «материал 2» только для первой строки и «материал 3» для строк, кроме первой строки.AWK-программирование, условные операторы

awk '{ { Do stuff 1 } if(NR==1) { Do stuff 2 } else { Do stuff 3 } }' 

Исходя из вышеизложенного, ниже будет делать «материал 1» для каждой строки, «материал 2», когда строка не первая строка и «материал 3» для каждой строки (в том числе первого) правильно ??

awk '{ Do stuff 1 } NR!=1 { Do stuff 2 } { Do stuff 3 }' 

Или будет «материал 2» и «материал 3» выполняться только для линий, где NR! = 1 ??

+4

Почему вы его не проверяете? –

ответ

1

На входе в 5 строк:

ls -1 | awk '{ print "allways"; } NR!=1 { print NR"-"2; } { print NR"-"3 }' 
allways 
1-3 
allways 
2-2 
2-3 
allways 
3-2 
3-3 
allways 
4-2 
4-3 
allways 
5-2 
5-3 

Итак, stuff3 будет сделано ВСЕГДА (точно так же как stuff1). Условие2.

1

Обратите внимание на внешние фигурные скобки в первом; у вас есть один блок, который выполняется на всех строках, содержащий блок, который выполняется на всех строках, и условие, которое принимает решение на основе NR.

Второй имеет три блока, второй из которых имеет на нем условие, так что он выполняется только для строк 2 и далее.

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

  • Нет связанных вопросов^_^