2012-04-03 151 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

你給的文件是一個shell腳本,而不是awk程序。所以,試試sh my.awk

如果要使用awk -f my.awk life.csv > life_out.cs,則從文件中刪除awk -F , '和最後一行,並在BEGIN中添加FS=","

+0

你可以從像'尾-f'輸出管到'awk' shell腳本?所以我可以拖拽一個日誌文件,然後用awk做一些處理然後輸出到屏幕上? – 2018-02-09 06:27:54

+0

其實它看起來像下面的st answer回答是我正在尋找。 – 2018-02-09 06:29:42

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`