2012-04-03 8 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スクリプトの最初の行に #!/bin/awk -fを置く場合、それは簡単です FS=","

11

として.AWKファイルの開始ブロックにそれを追加することができます。さらに、Vimなどのエディタでは、ファイルをAWKスクリプトとして認識し、色付けすることができます。 :)

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

その後は、このようなあなたのAWKスクリプトを呼び出すことができます。

`$ echo "something" | ./awk-script` 
関連する問題