任何想法如何实现相同?
awk '
{
{
split($i, keyVal, "@")
key=keyVal[1];
val=keyVal[2];
if(val ~ /^ *$/)
val="Y";
}
}
' File
Run Code Online (Sandbox Code Playgroud)
我试过了
1) if(val == "")
2) if(val ~ /^ *$/)
Run Code Online (Sandbox Code Playgroud)
两种情况都不起作用.
Lev*_*von 49
与之比较""应该有效,所以有点奇怪
作为另一种选择,您可以使用该length()函数,如果为零,则您的变量为null/empty.例如,
if (length(val) == 0)
Run Code Online (Sandbox Code Playgroud)
此外,也许内置变量NF(字段数)可以派上用场?由于我们无法访问您的输入数据,因此很难说,但另一种可能性.
Ale*_*lin 12
它对我来说很好
$ awk 'BEGIN{if(val==""){print "null or empty"}}'
null or empty
Run Code Online (Sandbox Code Playgroud)
你无法区分变量为空和null,当你访问"unset"变量时,awk只是用默认值初始化它(这里是""- 空字符串).您可以使用某种解决方法,例如,将val_accessed变量设置为0,然后1在您访问它时.或者更简单的方法(有点"hackish")将val设置为"unitialized"(或运行程序时不能出现的其他值).
PS:你的脚本对我来说很奇怪,嵌套括号是什么?
你可以直接使用变量而不进行比较,考虑空/ null /零值false,其他一切都是true.
看这里 :
# setting default tag if not provided
if (! tag) {
tag="default-tag"
}
Run Code Online (Sandbox Code Playgroud)
因此tag,default-tag除非用户像这样调用它,否则此脚本将具有值的变量:
$ awk -v tag=custom-tag -f script.awk targetFile
Run Code Online (Sandbox Code Playgroud)
这是正确的:GNU Awk 4.1.3,API:1.1(GNU MPFR 3.1.4,GNU MP 6.1.0)
| 归档时间: |
|
| 查看次数: |
78028 次 |
| 最近记录: |