我的主函数声明为



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

我的主函数声明为

int

main(int argc, char *argv[])有谁知道是什么原因造成的?

任何帮助将不胜感激。

第 1-6 行是

如果我理解正确,您正在尝试使它只有一个shell脚本,而不是一个shell脚本和一个awk脚本,对吗?

您可以在调用 awk 时将 awk 程序放在命令行上。 只需将其放在单引号中即可。

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

那么你没有单独的 .awk 文件。

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

for ARG in "$@"
do
    postcode=`echo "$ARG" | sed -e 's/(.*)/U1/'`
    areacode=`echo "$postcode" | sed -e 's/.*(^[A-Z][A-Z]*).*/1/' | sed -e 's/(.*)/L1/'`
    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/(.*)/U1/'`
    areacode=`echo "$postcode" | sed -e 's/.*(^[A-Z][A-Z]*).*/1/' | sed -e 's/(.*)/L1/'`
    awk -F, -vOFS=, -v pcode="$postcode" 
      '$1 == pcode {print $1, $3, $4}' < "$areacode".csv
done

未经测试,因为您没有提供任何示例输入和预期输出,但看起来这就是您要做的:

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。

同样,如果没有一些示例输入,很难说,但是如果您的输入中重复了相同的区号和/或邮政编码,则可以使上述内容更有效。特别是,每个区号文件可以只搜索一次,以查找它们可能包含的所有邮政编码。

相关内容

  • 没有找到相关文章

最新更新