我正在 ssh'ing 到一个机器列表并获取它们的所有系统信息(型号、硬件地址等)
我得到的信息很好,而且组织得井井有条,可以轻松地使用 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 来获取一个字段而不是所有字段。但这对我的情况没有好处,因为我需要对系统信息执行多项操作,因此更容易一次抓住整个事情,然后在本地使用它。