2012-04-03 2 views
17

Ich konvertiere eine CSV Datei in ein Tabellenformat, und ich schrieb ein AWK-Skript und speicherte es als my.awk. Hier ist das mein Skript:Wie starte ich eine .awk-Datei?

#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* 

Wie kann ich dieses Skript auf einem Unix-Server ausführen? Ich habe versucht, diese my.awk-Datei auszuführen, indem Sie diesen Befehl:

awk -f my.awk life.csv 

Antwort

22

Die Datei, die Sie geben, ist ein Shell-Skript , nicht ein awk-Programm. Versuchen Sie also sh my.awk.

Wenn Sie awk -f my.awk life.csv > life_out.cs verwenden möchten, entfernen Sie dann awk -F , ' und die letzte Zeile aus der Datei und fügen Sie FS="," in BEGIN.

+0

können Sie Rohr Ausgabe von so etwas wie 'Schwanz -f' in eine' awk' Shell-Skript? Also könnte ich eine Log-Datei beenden, dann etwas mit awk bearbeiten und dann auf den Bildschirm ausgeben? –

+0

Eigentlich sieht es wie staggy Antwort unten ist, was ich suche. –

10

Setzen Sie das Teil von BEGIN....END{} in eine Datei und nennen Sie es wie my.awk.

Und dann führen Sie es unten wie:

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

Auch sehe ich ein Feldtrenn als ,. Sie können, dass in dem Block der Datei als FS=","

11

.awk beginnen hinzufügen Wenn Sie #!/bin/awk -f auf der ersten Zeile Ihres AWK Skript setzen es einfacher ist. Plus dann Editoren wie Vim und ... werden die Datei als ein AWK-Skript erkennen und Sie können kolorieren. :)

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

Dann können Sie Ihre AWK Skript wie folgt nennen:

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