繁体   English   中英

回声“ $ myvar” | awk'FNR…'没有回显任何内容

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM