我的主要功能被声明为

时间:2012-12-06 14:59:46

标签: bash shell awk

每次编译文件时都会得到错误,错误将我引用到第7行,这是我声明main()函数的地方。

我的主要功能被声明为

int main(int argc,char * argv []) 有谁知道是什么导致了这个?

非常感谢任何帮助。

第1-6行是

4 个答案:

答案 0 :(得分:1)

如果我理解正确的话,你试图让它只有一个shell脚本,而不是一个shell脚本和一个awk acript,对吗?

您可以在调用awk时将awk程序放在命令行上。把它放在单引号中。

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

然后你没有单独的.awk文件。

答案 1 :(得分:0)

没有必要将单行awk脚本嵌入到shell脚本中。当您使用单引号时,它会自动处理多行。

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

答案 2 :(得分: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

答案 3 :(得分: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和/或postcodes,则可以提高效率。特别是,对于它们可能包含的所有邮政编码,每个areacodes文件只能被搜索一次。