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

标签 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

我试过:

`awk '{print $1, $(NF-2) ? $(NF-2) : "None" }'`

处理第二行时出现错误:

host1, 10.10.10.1
awk: run time error: negative field index $-1

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

最佳答案

你很接近。应该这样做:

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

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

关于awk:运行时错误:负字段索引 $-1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57506446/

相关文章:

linux - 如何连接两个 linux 命令的结果?

shell - 如何在Unix中的文件的每一行末尾添加100个空格

shell - 无法从 UNIX 上的命令文本输出文件中删除空白或空白区域

linux - 在字符串中使用文件中的匹配

bash - 从文件中读取索引 `n` 低于匹配给定正则表达式的行的所有行

bash - 循环目录和文件 bash 脚本 - awk 不写入文件

linux - 在 AWK 中运行命令

linux - 如何在 unix shell 中转置行和列?

linux - 如何从 IP 地址列表中获取第四个八位字节大于 10 的行?

awk - 如何在 unix 中基于一个匹配列合并两个 csv 文件。两个文件中列的位置不同