问题描述
我的代码确实运行了,但我认为粗体部分(方程)有错误。请帮我更正代码。
检查文本文件中密码的强度和强度,
- 长度为 9 个或更多字符
- 至少应包含一位数字
- 至少应该包含一个大写字母
如果满足要求打印“成功”否则打印“不成功”。
awk 'BEGIN { FS="" ; OFS="\t";} NR>1{ if (($2)length -ge 8 && $2 ~ "[[:digit:]]" && $2 ~ "[[:upper:]]")
解决方法
您的 length()
语法错误,它是一个函数,其括号内的参数是您要返回其长度的字符串。
另外,-gt
是 shell 语法; Awk 使用常规的 >=
进行数值比较。 (您不能轻松地在 shell 中使用 >
符号,因为它是为重定向保留的;但 Awk 完全是一种独立的语言。)
最后,您的 awk 脚本似乎在 if
之后没有任何操作,甚至包括左花括号的右花括号。
awk 'BEGIN { FS=" " ; OFS="\t";} NR>1{ if (length($2) >= 8 && $2 ~ "[[:digit:]]" && $2 ~ "[[:upper:]]") print }'
可以重构脚本以利用 { print }
已经是默认操作的事实,并且您的所有条件都适用于当前输入行。
awk 'BEGIN { FS=" " ; OFS="\t";} NR>1 && length($2) >= 8 && $2 ~ "[[:digit:]]" && $2 ~ "[[:upper:]]"'