Condição de Awk junto com o cabeçalho

1

Eu tenho um arquivo employee.txt fictício como segue para brincar com 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

Ao tentar imprimir todos os funcionários com $1 > 200 , posso fazer isso usando o seguinte

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

No entanto, estou tentando adicionar um título personalizado junto com a condição acima, conforme mostrado:

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

O código acima parece não funcionar.

    
por abhishek nair 02.10.2015 / 09:34

2 respostas

3

Em awk , o "corpo" deve ter uma sintaxe da seguinte forma:

condition{command}

Quando condition é atingido command é feito com a linha atual. Também pode ser:

{command}

... sem um condition , então será executado para todas as linhas . Isso também é válido:

condition

... sem command , então awk apenas imprime $0 , daí a linha inteira, quando condition é atendido.

Seu awk deve aparecer:

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

Observe $1=$1 . Isso é necessário porque você só altera o separador de campo de saída. Portanto, você precisará imprimir os campos um por um ( $1,$2,... ) ou forçar a reconstrução do registro em $n=$n .

    
por 02.10.2015 / 09:53
2

use

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

ou

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

a instrução que você usa imprime todo o primeiro campo ($ 1) para "nome do arquivo" 200.

    
por 02.10.2015 / 09:42