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* 

이 스크립트는 어떻게 유닉스 서버에서 실행할 수 있습니까? 나는이 명령을 사용하여이 my.awk 파일을 실행하려고 : 당신이 줄

awk -f my.awk life.csv 

답변

22

파일은 쉘 스크립트 아닌 AWK 프로그램입니다. 따라서 sh my.awk을 시도하십시오. 당신이 awk -f my.awk life.csv > life_out.cs를 사용하려면

, 다음 awk -F , '을 제거하고 파일의 마지막 줄과 BEGINFS=","를 추가합니다.

+0

할 수 있습니다'awk' 쉘 스크립트에'꼬리 -f' 같은에서 파이프 출력? 그래서 로그 파일을 꼬집어서 awk로 처리 한 다음 화면에 출력 할 수 있습니까? –

+0

실제로 내가 찾고있는 것은 아래에있는 답답한 답변과 같습니다. –

10

BEGIN....END{}의 부품을 파일에 넣고 my.awk와 같은 이름을 지정하십시오.

다음 아래처럼 실행 :

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

또한 I는 , 같은 필드 분리 참조. 당신은 쉽게 당신의 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`