awk 명령 문제

awk 명령 문제

다음 오류를 발생시키는 스크립트가 있습니다. 누구든지 저를 추적할 수 있습니까? 지난 4시간 동안 이 문제로 꼼짝 못했습니다.

스크립트에는 다음 내용이 포함되어 있습니다. vi bb.sh

#!/bin/awk -f
'BEGIN{FS=OFS="|"} NR==FNR{$1="";++a[$0];next} {field1=$1;$1=""; if ( !(a[$0]) ) {$1=field1;print $0} }' /home/path/a.txt  /home/path/b.txt >  /home/path/c.txt

실행 후 보고된 오류:

-bash-4.2$ sh bb.sh
bb.sh: line 2: BEGIN{FS=OFS="|"} NR==FNR{$1="";++a[$0];next} {field1=$1;$1=""; if ( !(a[$0]) ) {$1=field1} }: command not found

답변1

awk스크립트에서 누락된 사항은 다음과 같습니다.

awk 'BEGIN{FS=OFS="|"} NR==FNR{$1="";++a[$0];next} {field1=$1;$1=""; if ( !(a[$0]) ) {$1=field1;print $0} }' \
/home/path/a.txt  /home/path/b.txt >  /home/path/c.txt

스크립트에는 아마도 #!/bin/sh첫 번째 줄도 있어야 합니다.

또는 스크립트를 올바른 awk스크립트로 변환할 수 있습니다.

#!/usr/bin/awk -f

BEGIN {FS = OFS = "|"} 

NR==FNR { $1="";++a[$0]; next }

{
  field1 = $1;
  $1 = ""; 
  if ( !(a[$0]) ) {
     $1 = field1;
     print $0;
  }
}

...그런 다음 다음과 같이 실행합니다.

$ ./bb.awk /home/path/a.txt /home/path/b.txt >/home/path/c.txt

답변2

스크립트 가 있지만 이를 스크립트로 실행 awk하려고 합니다 . sh그건 작동하지 않습니다. 두 가지 옵션이 있습니다:

  1. 대신 awk 스크립트로 실행하세요. 파일에 이미 shebang 줄( #!/bin/awk -f)이 있으므로 따옴표와 입력 파일을 제거하세요.

    #!/bin/awk -f
    BEGIN{FS=OFS="|"} NR==FNR{$1="";++a[$0];next} {field1=$1;$1=""; if ( !(a[$0]) ) {$1=field1;print $0} }
    

    그런 다음 실행 가능하게 만들고( chmod a+x bb.sh) 실행합니다.

    ./bb.sh  /home/path/a.txt  /home/path/b.txt >  /home/path/c.txt
    

    혼동하지 않도록 .sh확장명을 제거하거나 이름을 바꿀 수도 있습니다 . .awk컴퓨터는 상관하지 않습니다. 컴퓨터는 당신을 위해 존재합니다.

  2. 이것을 다음 명령을 실행하는 쉘 스크립트로 변환하십시오 awk.

    #!/bin/sh
    awk 'BEGIN{FS=OFS="|"} NR==FNR{$1="";++a[$0];next} {field1=$1;$1=""; if ( !(a[$0]) ) {$1=field1;print $0} }' /home/path/a.txt  /home/path/b.txt >  /home/path/c.txt
    

관련 정보