2012-04-03 5 views
17

Я преобразовываю файл CSV в формат таблицы, и я написал сценарий AWK и сохранил его как my.awk. Вот мой сценарий:Как запустить файл .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* 

Как запустить этот скрипт на сервере Unix? Я попытался запустить этот my.awk файл с помощью следующей команды:

awk -f my.awk life.csv 

ответ

22

Файл вы даете это скрипт оболочки, а не программа AWK. Итак, попробуйте sh my.awk.

Если вы хотите использовать awk -f my.awk life.csv > life_out.cs, а затем удалить awk -F , ' и последняя строка из файла и добавить FS="," в BEGIN.

+0

может вам выход трубы из чего-то вроде 'хвост -f' в' awk' скрипт? Таким образом, я мог бы хвост файла журнала, а затем выполнить некоторую обработку с помощью awk, а затем вывести его на экран? –

+0

На самом деле это выглядит как тупой ответ ниже, это то, что я ищу. –

10

Вставьте деталь из BEGIN....END{} внутри файла и назовите его как my.awk.

И затем выполнить его, как показано ниже:

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

Также я вижу разделитель поля как ,. Можно добавить, что в блоке начинают файла .awk в FS=","

11

Если поставить #!/bin/awk -f на первой строке AWK сценария это проще. Кроме того, редакторы вроде Vim и ... распознают файл как AWK-скрипт, и вы можете раскрасить его. :)

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

Тогда вы можете назвать ваш сценарий AWK, как это:

`$ echo "something" | ./awk-script` 
Смежные вопросы