awk com múltiplos se e substituição

0

Eu gostaria de fazer o equivalente a isso no awk (para cada linha, a partir da linha de comando):

items = split(',')
if items[2] >= 10:
  return items[0], items[1], 7
if 4 < items[2] < 10:
  return items[0], items[1], 2
return  items[0], items[1], 1

O arquivo está no formato csv, com 3 campos.

    
por Bob 17.10.2016 / 11:22

2 respostas

2

Salve o seguinte texto como, por exemplo, xxx.awk

#!/usr/bin/awk -f
BEGIN {
   FS="," ; 
}{
   if ( $3 >= 10 ) {
      print $1" "$2" "7 ; 
   } else if ( 4 < $3 && $3 < 10 ) {
      print $1" "$2" "2 ;
   } else {
       print $1" "$2" "1 ;
   }
}

Em seguida, execute-o por

./xxx.awk  yourCSVfile

Lembre-se de executar a linha de comando: "chmod + x xxx.awk" antes de executar.

    
por 17.10.2016 / 12:16
0
  • a sintaxe de divisão é split(i,items,",") (sequência de divisão i na matriz items separada por , )
  • início do índice em 1
  • o awk não suporta a < b < c construct
  • a concatenação é feita por a b

você simplesmente quer

split(i,items,",")
if (items[3] >= 10)
  return items[1] items[2] 7 ;
if (4 < items[3] ) ## if item[2]>=10, code isn't reached
  return items[1] items[2] 2 ;
return  items[1] items[2] 1

give (string de entrada = > resultado)

11,11,11 => 11117
5,5,5 => 552
1,1,1 => 111
    
por 17.10.2016 / 12:21