Как запустить файл .awk?

Я конвертирую файл CSV в формат таблицы, и я написал AWK script и сохранил его как my.awk. Вот мой script:

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

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

awk -f my.awk life.csv

Ответы

Ответ 1

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

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

Ответ 2

Поместите часть из BEGIN....END{} внутри файла и назовите ее как my.awk.

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

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

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

Ответ 3

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

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

Затем вы можете вызвать AWK script следующим образом:

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