ファイルをコンパイルするたびに発生するエラーです。このエラーは、main() 関数を宣言する 7 行目を参照します。
私のメインの関数は次のように宣言されています
int main(int argc, char *argv[]) これの原因を知っている人はいますか?
どんな助けでも大歓迎です。
1行目から6行目は
私の理解が正しければ、1 つのシェル スクリプトと 1 つの awk ascript ではなく、1 つのシェル スクリプトしか持たないようにしようとしているのですね。
を呼び出すときに、awk プログラムをコマンド ラインに配置できますawk
。一重引用符で囲むだけです。
awk 'BEGIN {FS = ","} {if....}' -v pcode="\"""$postcode""\"" < "$areacode".csv
その場合、別の .awk ファイルはありません。
サンプル入力と期待される出力を提供しなかったため、テストされていませんが、次のように見えます。
awk -v args="$@" '
BEGIN {
FS = ","
OFS = ", "
n = split(args,argA)
for (i=1; i<=n; i++) {
arg = argA[i]
match(arg,/[[:alpha:]]+/)
areacode = substr(arg,RSTART,RLENGTH)
ARGV[++ARGC] = tolower(areacode) ".csv"
postcodes[ARGC] = "\"" toupper(arg) "\""
}
}
FNR == 1 { pcode = postcodes[++argInd] }
$1 == pcode { print $1, $3, $4 }
'
GNU awkを使用する場合は、++argIndの代わりにARGINDを使用できます。
繰り返しになりますが、サンプル入力なしで言うのは難しいですが、入力で同じ市外局番や郵便番号が繰り返されている場合は、上記をより効率的にすることができます。特に、areacodesファイルは、それらに含まれる可能性のあるすべての郵便番号を1回だけ検索できます。
シェル スクリプトに埋め込むために単一行の awk スクリプトを作成する必要はありません。一重引用符を使用すると、複数の行が自動的に処理されます。
for ARG in "$@"
do
postcode=`echo "$ARG" | sed -e 's/\(.*\)/\U\1/'`
areacode=`echo "$postcode" | sed -e 's/.*\(^[A-Z][A-Z]*\).*/\1/' | sed -e 's/\(.*\)/\L\1/'`
awk -v pcode="\"""$postcode""\"" '
BEGIN {FS = ","}
{if (pcode == $1){ print $1", " $3", " $4 }}
' < "$areacode".csv
done
たぶん、このようなものですか?
for ARG in "$@"
do
postcode=`echo "$ARG" | sed -e 's/\(.*\)/\U\1/'`
areacode=`echo "$postcode" | sed -e 's/.*\(^[A-Z][A-Z]*\).*/\1/' | sed -e 's/\(.*\)/\L\1/'`
awk -F, -vOFS=, -v pcode="$postcode" \
'$1 == pcode {print $1, $3, $4}' < "$areacode".csv
done