[awk] How to run a .awk file?

I am converting a CSV file into a table format, and I wrote an AWK script and saved it as my.awk. Here is the my 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*

How can I run this script on a Unix server? I tried to run this my.awk file by using this command:

awk -f my.awk life.csv

This question is related to awk

The answer is


Put the part from BEGIN....END{} inside a file and name it like my.awk.

And then execute it like below:

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

Also I see a field separator as ,. You can add that in the begin block of the .awk file as FS=","


If you put #!/bin/awk -f on the first line of your AWK script it is easier. Plus editors like Vim and ... will recognize the file as an AWK script and you can colorize. :)

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

Change the file to be executable by running:

chmod ugo+x ./awk-script

and you can then call your AWK script like this:

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