다음 오류를 발생시키는 스크립트가 있습니다. 누구든지 저를 추적할 수 있습니까? 지난 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
그건 작동하지 않습니다. 두 가지 옵션이 있습니다:
대신 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
컴퓨터는 상관하지 않습니다. 컴퓨터는 당신을 위해 존재합니다.이것을 다음 명령을 실행하는 쉘 스크립트로 변환하십시오
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