gpt4 book ai didi

awk 1 意外字符 '.' 突然出现

转载 作者:行者123 更新时间:2023-12-04 21:15:19 24 4
gpt4 key购买 nike

脚本正在运行。我添加了一些评论并重命名然后提交。今天我的导师告诉我它不起作用并给我错误 awk 1 unexpected character '.'该脚本应该在命令行中读取姓名并返回该姓名的学生信息。
现在我检查了它,令人惊讶的是它给了我错误。
我应该通过这样的命令运行它:

scriptName -v name="aname" -f filename

这是什么问题,我的代码的哪一部分导致了这个问题?
#!/usr/bin/awk
BEGIN{
tmp=name;
nameIsValid;
if (name && tolower(name) eq ~/^[a-z]+$/ )
{

inputName=tolower(name)
nameIsValid++;
}
else
{
print "you have not entered the student name"
printf "Enter the student's name: "
getline inputName < "-"
tmp=inputName;
if (tolower(inputName) eq ~/^[a-z]+$/)
{
tmpName=inputName
nameIsValid++
}
else
{
print "Enter a valid name!"
exit
}
}
inputName=tolower(inputName)
FS=":"
}
{
if($1=="Student Number")
{
split ($0,header,FS)
}
if ($1 ~/^[0-9]+$/ && length($1)==8)
{
split($2,names," ")
if (tolower(names[1]) == inputName || tolower(names[2])==inputName )
{
counter++
for (i=1;i<=NF;i++)
{
printf"%s:%s ",header[i], $i

}

printf "\n"

}
}
}
END{
if (counter == 0 && nameIsValid)
{
printf "There is no record for the %-10s\n" , tmp
}
}

最佳答案

以下是修复脚本的步骤:

  • 摆脱所有那些虚假的 NULL语句(行尾的尾随分号)。
  • 去掉未设置的变量 eq (它不是相等运算符!)来自您所有的比较。
  • 清理缩进。
  • 摆脱第一个非功能性 nameIsValid;陈述。
  • 更改 printf "\n"到更简单的 print "" .
  • 摆脱无用的,FS arg 到 split() .
  • 更改 name && tolower(name) ~ /^[a-z]+$/只是该条件的第二部分,因为如果匹配,那么当然会填充名称。
  • 摆脱所有这些 tolower() s 并使用字符类而不是显式 a-z范围。
  • 摆脱tmp多变的。
  • 简化您的 BEGIN逻辑。
  • 摆脱不必要的nameIsValid完全可变。
  • 使 awk 主体更像 awk

  • 这是结果(未经测试,因为没有发布样本输入/输出):
    BEGIN {
    if (name !~ /^[[:alpha:]]+$/ ) {
    print "you have not entered the student name"
    printf "Enter the student's name: "
    getline name < "-"
    }

    if (name ~ /^[[:alpha:]]+$/) {
    inputName=tolower(name)
    FS=":"
    }
    else {
    print "Enter a valid name!"
    exit
    }
    }

    $1=="Student Number" { split ($0,header) }

    $1 ~ /^[[:digit:]]+$/ && length($1)==8 {

    split(tolower($2),names," ")

    if (names[1]==inputName || names[2]==inputName ) {
    counter++
    for (i=1;i<=NF;i++) {
    printf "%s:%s ",header[i], $i
    }
    print ""
    }
    }
    }

    END {
    if (counter == 0 && inputName) {
    printf "There is no record for the %-10s\n" , name
    }
    }

    关于awk 1 意外字符 '.' 突然出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13045110/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com