是我每次编译文件时遇到的错误,错误将我引用到第 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/\(.*\)/\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
未经测试,因为您没有提供任何示例输入和预期输出,但看起来这是您想要做的:
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。
同样,如果没有一些示例输入,很难说,但如果您在输入中重复相同的区号和/或邮政编码,则上述内容可以更有效。特别是每个地区代码文件可以只搜索一次以查找它们可能包含的所有邮政编码。