2012-04-03 10 views
17

Estoy convirtiendo un archivo CSV en un formato de tabla, y escribí un script AWK y lo guardé como my.awk. Aquí está mi script:¿Cómo ejecutar un archivo .awk?

#AWK for test 
awk -F , ' 
    BEGIN { 
     aa = 0; 
    } 
    { 
     hdng = "fname,lname,salary,city"; 
     l1 = length($1); 
     l13 = length($13); 
     if ((l1 > 2) && (l13 == 0)) { 
      fname = substr($1, 2, 1); 
      l1 = length($3) - 4; 
      lname = substr($3, l1, 4); 
      processor = substr($1, 2); 
      #printf("%s,%s,%s,%s\n", fname, lname, salary, $0); 
     } 

     if ($0 ~ ",,,,") 
      aa++ 
     else if ($0 ~ ",fname") 
      printf("%s\n", hdng); 
     else if ((l1 > 2) && (l13 == 0)) { 
      a++; 
     } 
     else { 
      perf = $11; 
      if (perf ~/^[0-9\.\" ]+$/) 
       type = "num" 
      else 
       type = "char"; 
      if (type == "num") 
       printf("Mr%s,%s,%s,%s,,N,N,,\n", $0,fname,lname, city); 
     } 
    } 
    END { 
    } ' <life.csv> life_out.csv* 

¿Cómo puedo ejecutar este script en un servidor Unix? Traté de correr este archivo my.awk mediante el uso de este comando:

awk -f my.awk life.csv 

Respuesta

22

El archivo que das es una secuencia de comandos shell y no un programa awk. Por lo tanto, intente sh my.awk.

Si desea utilizar awk -f my.awk life.csv > life_out.cs, a continuación, quitar awk -F , ' y la última línea del archivo y añadir FS="," en BEGIN.

+0

posible que la salida del tubo de algo como 'cola -f' en un script de shell awk''? Entonces, ¿podría alinear un archivo de registro, luego hacer un procesamiento con awk y luego enviarlo a la pantalla? –

+0

En realidad, parece que la respuesta stoggy a continuación es lo que estoy buscando. –

10

Ponga la pieza de BEGIN....END{} dentro de un archivo y asígnele el nombre my.awk.

Y luego ejecutarlo, como a continuación:

awk -f my.awk life.csv >output.txt 

También veo un separador de campo como ,. Se puede añadir que en el bloque begin del archivo .awk como FS=","

11

Si pones #!/bin/awk -f en la primera línea del script AWK es más fácil. Además, los editores como Vim y ... reconocerán el archivo como un script AWK y usted podrá colorear. :)

#!/bin/awk -f 
BEGIN {} # Begin section 
{}  # Loop section 
END{}  # End section 

A continuación, puede llamar a su script AWK así:

`$ echo "something" | ./awk-script` 
Cuestiones relacionadas