-4

ファイルをコンパイルするたびに発生するエラーです。このエラーは、main() 関数を宣言する 7 行目を参照します。

私のメインの関数は次のように宣言されています

int main(int argc, char *argv[]) これの原因を知っている人はいますか?

どんな助けでも大歓迎です。

1行目から6行目は

4

4 に答える 4

1

私の理解が正しければ、1 つのシェル スクリプトと 1 つの awk ascript ではなく、1 つのシェル スクリプトしか持たないようにしようとしているのですね。

を呼び出すときに、awk プログラムをコマンド ラインに配置できますawk。一重引用符で囲むだけです。

awk 'BEGIN {FS = ","} {if....}' -v pcode="\"""$postcode""\"" < "$areacode".csv

その場合、別の .awk ファイルはありません。

于 2012-12-06T15:07:06.970 に答える
0

サンプル入力と期待される出力を提供しなかったため、テストされていませんが、次のように見えます。

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回だけ検索できます。

于 2012-12-06T15:27:03.527 に答える
0

シェル スクリプトに埋め込むために単一行の 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
于 2012-12-06T15:06:46.740 に答える
0

たぶん、このようなものですか?

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
于 2012-12-06T15:07:21.010 に答える