
我有一個腳本拋出以下錯誤,任何人都可以跟踪我在過去的 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
以免讓您感到困惑。電腦不會關心,它就在那裡為你服務。將其轉換為運行命令的 shell 腳本
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