echo“$ myvar”| awk'FNR ....'没有回应任何东西

时间:2013-07-05 14:50:45

标签: linux bash variables ssh awk

我正在查看机器列表并获取所有系统信息(型号,硬件地址等)

我收到的信息很好,整齐有序,可以轻松使用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来获取一个字段而不是所有字段。但这对我的情况没有好处,因为我需要用系统信息做多个事情,所以更容易一次性抓住整个东西然后在本地使用它。

1 个答案:

答案 0 :(得分:2)

  

FNR当前输入文件中的输入记录编号。

     

NR到目前为止看到的输入记录总数。

这里,我的awk(Gnu awk 4.1.0),NR和FNR都有效。但如果您没有输入文件,最好使用NR。

<强> @rici 问题是,真正的旧awk没有将FNR作为特殊变量实现;只有NR。