[英]echo “$myvar” | awk 'FNR …' doesn't echo anything
我要查看机器列表,并获取它们的所有系统信息(型号,硬件地址等)
我回来的信息很好并且井井有条,可以轻松地使用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而不是我想要的一行。
如果我在外壳程序中的脚本之外执行此操作,则可以这样做:
smbios-sys-info | awk 'FNR == 2 {print $3 $4}'
我想关于回声“ $ entry”(引号中的变量)的使用可能存在一些潜在的含义,尽管“ $ entry”保留了smbios-sys-info的格式,但它以某种方式影响了awk选择特定行的能力。
只是为了给您一个想法,这是命令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来获取一个字段而不是所有字段。 但这对我的情况不利,因为我需要对系统信息进行多种处理,因此一口气抓住整个内容然后在本地使用它会更容易。
FNR当前输入文件中的输入记录号。
NR到目前为止看到的输入记录总数。
在这里,使用我的awk(Gnu awk 4.1.0),NR和FNR均起作用。 但是如果您没有文件作为输入,最好使用NR。
@rici问题是真正的老awk不会将FNR实现为特殊变量。 只有NR。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.