我正在查看机器列表并获取所有系统信息(型号,硬件地址等)
我收到的信息很好,整齐有序,可以轻松使用awk获取我需要的信息。但是,什么不起作用,是FNR选择一个特定的行:
entry=$(tssh -n 10 $host 'smbios-sys-info')
echo "$entry" | awk 'FNR == 2 {print $3 $4}'
如果我删除FNR,awk'{print $ 3 $ 4}'单独工作就好了,但是给了我所有行的3和4而不是我想要的那一行。
如果我在shell中的脚本之外执行此操作,则可以:
smbios-sys-info | awk 'FNR == 2 {print $3 $4}'
我认为使用echo“$ entry”(引号中的变量)可能会产生一些潜在影响,这会影响awk选择特定行的能力,即使“$ entry”保留了smbios-sys的格式-info。
只是为了给你一个想法,这是命令smbios-sys-info输出:
[root@host ~]# smbios-sys-info
Libsmbios version: 2.2.26
Product Name: OptiPlex 760
Vendor: Dell Inc.
BIOS Version: A02
System ID: 123456
Service Tag: ABCDEFG
Express Service Code: 11111111111
Asset Tag: N/A
Property Ownership Tag: N/A
编辑我意识到另一种选择是我可以在ssh命令中使用awk来获取一个字段而不是所有字段。但这对我的情况没有好处,因为我需要用系统信息做多个事情,所以更容易一次性抓住整个东西然后在本地使用它。
答案 0 :(得分:2)
FNR当前输入文件中的输入记录编号。
NR到目前为止看到的输入记录总数。
这里,我的awk(Gnu awk 4.1.0),NR和FNR都有效。但如果您没有输入文件,最好使用NR。
<强> @rici 强> 问题是,真正的旧awk没有将FNR作为特殊变量实现;只有NR。