2012-04-03 13 views
17

Konwertuję plik CSV na format tabeli, a następnie napisałem skrypt AWK i zapisałem go jako my.awk. Oto mój skrypt:Jak uruchomić plik .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* 

Jak mogę uruchomić ten skrypt na serwerze Unix? Próbowałem uruchomić ten plik my.awk za pomocą polecenia:

awk -f my.awk life.csv 

Odpowiedz

22

Plik dajesz jest skryptem powłokinie program awk. Tak więc spróbuj sh my.awk.

Jeśli chcesz użyć awk -f my.awk life.csv > life_out.cs, a następnie usunąć awk -F , ' i ostatni wiersz z pliku i dodać FS="," w BEGIN.

+0

możesz wyjście rury z czymś takim ogonem -f' '' awk' się w skrypcie powłoki? Mógłbym więc ustawić plik dziennika, a następnie przeprowadzić przetwarzanie za pomocą awk, a następnie wyświetlić go na ekranie? –

+0

Właściwie wygląda na to, że odpowiedź na pytanie "stoggy" jest tym, czego szukam. –

10

Umieść część z BEGIN....END{} wewnątrz pliku i nazwij ją jak my.awk.

a następnie wykonać go jak poniżej:

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

Również widzę separator pól jako ,. Można dodać, że w bloku rozpocznie pliku .awk jak FS=","

11

Jeśli umieścisz #!/bin/awk -f na pierwszej linii skryptu AWK to jest łatwiejsze. Ponadto edytory takie jak Vim i ... rozpoznają plik jako skrypt AWK i można go pokolorować. :)

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

Następnie można wywołać skrypt AWK tak:

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