awk:运行时错误:负字段索引$ -1

Alf*_*man 2 awk

我试图打印第一列,(如果有的话)打印第二列,但是有时正在处理的行只有一列。

例:

host1, auth ldap system-auth { bind-dn CN=xx-w-xx,OU=iResources,DC=int,DC=dir,DC=dimsum,DC=com bind-pw xxxxx login-attribute samaccountname search-base-dn ou=wbab,dc=int,dc=dir,dc=dodo,dc=com servers { 10.10.10.1 } }
host2
Run Code Online (Sandbox Code Playgroud)

我试过了:

`awk '{print $1, $(NF-2) ? $(NF-2) : "None" }'`
Run Code Online (Sandbox Code Playgroud)

处理第二行时出现错误:

host1, 10.10.10.1
awk: run time error: negative field index $-1
Run Code Online (Sandbox Code Playgroud)

我们如何处理否定或不存在的字段?

Jot*_*tne 5

你近了 应该这样做:

awk '{print $1,(NF>2?$(NF-2):"None")}' file
host1, 10.10.10.1
host2 None
Run Code Online (Sandbox Code Playgroud)

它测试字段数是否大于两个。您确实检查了最后一个字段-2中是否有数据,如果该数据不存在,它将失败。此外,还应该在三元运算符(expr1 ? expr2 : expr3)周围使用括号。