Условие Awk вместе с заголовком

У меня есть файл dummy employee.txt как awk : awk :

 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000 

При попытке распечатать всех сотрудников с помощью $1 > 200 , я могу сделать это, используя следующие

 cat employees.txt | awk '$1 > 200' 

Однако теперь я пытаюсь добавить пользовательский заголовок вместе с указанным выше условием:

 cat employees.txt | awk ' BEGIN{print "ID|Name|Designation|Department|Salary";OFS="|"} {print $1 > 200} END{print"------------------------"}' 

Однако приведенный выше код не работает.

В awk «тело» должно иметь следующий синтаксис:

 condition{command} 

Когда condition выполнено, command выполняется с текущей строкой. Это также может быть:

 {command} 

… без condition , поэтому он будет выполняться для каждой строки. Это также справедливо:

 condition 

… без command , тогда awk просто печатает $0 , а значит, всю строку, когда выполняется condition .


Ваш awk должен выглядеть так:

 awk 'BEGIN{print "ID|Name|Designation|Department|Salary";OFS="|"} $1>200{$1=$1;print} END{print"------------------------"}' file 

Обратите внимание: $1=$1 . Это необходимо, потому что вы только меняете разделитель полей вывода. Поэтому вам нужно либо распечатать поля по одному ( $1,$2,... ), либо принудительно восстановить запись $n=$n .

использовать либо

  BEGIN { ... } $1 > 200 END { .. } 

или

  BEGIN { ... } $1 > 200 { print ;} END { .. } 

инструкция, которую вы используете, напечатает все первое поле ($ 1) до «filename» 200.