Shell df-h需要uniq输出,并删除不精确的值
我已经用for Jason输出创建了一个shell脚本。我得到了正确的结果输出,但很少有不正确的挂载点也出现了。我想通过删除副本来获得uniq输出 disks=$ssh username@${server}df-h|\ 白鹭/ABC|\ awk“{print{\total\:\$3\,\used\:\$4\,\mountPoint\:\$5\},}”和\ ssh用户名@${server}df-h|\ 白鹭/XYZ|\ awk“{print{\total\:\$3\,\used\:\$4\,\mountPoint\:\$5\},}” && \ ssh用户名@${server}df-h|\ 白鹭/RRR|\ awk'{print{\total\:\$3\,\used\:\$4\,\mountPoint\:\$5\},}和&ssh用户名${server}df-h{egrep/CCC}awk'{print{\total\:\$3\,\used\:\$4\,\mountPoint\:\$5\}' 我现在得到的结果是:Shell df-h需要uniq输出,并删除不精确的值,shell,awk,ssh,grep,disk,Shell,Awk,Ssh,Grep,Disk,我已经用for Jason输出创建了一个shell脚本。我得到了正确的结果输出,但很少有不正确的挂载点也出现了。我想通过删除副本来获得uniq输出 disks=$ssh username@${server}df-h|\ 白鹭/ABC|\ awk“{print{\total\:\$3\,\used\:\$4\,\mountPoint\:\$5\},}”和\ ssh用户名@${server}df-h|\ 白鹭/XYZ|\ awk“{print{\total\:\$3\,\used\:\$4\,\mo
976M 92M 834M 10% /ABC
2.0G 3.5M 1.9G 1% /ABC---- duplicate mount points (need to remove one entry. i.e. /AAA)
99G 23G 71G 25% /XYZ
500G 53G 448G 11% /RRR
1.你可以省略白鹭
因为您使用的是awk,所以可以完全省略egrep并缩短代码
而不是
ssh | egrep | awk'{}
你可以用
ssh | awk'{}
即:
disks=$ssh username@${server}df-h|\
awk'/\/ABC/{print{\total\:\$3\,\used\:\$4\,\mountPoint\:\$5\},}'&&\
ssh用户名@${server}df-h|\
awk'/\/XYZ/{print{\total\:\$3\,\used\:\$4\,\mountPoint\:\$5\},}和\
ssh用户名@${server}df-h|\
awk'/\/RRR/{print{\total\:\$3\,\used\:\$4\,\mountPoint\:\$5\},}和\
ssh用户名@${server}df-h|\
awk'/\/CCC/{print{\total\:\$3\,\used\:\$4\,\mountPoint\:\$5\}'
2.awk:如何仅打印第一次出现的图案
您可以尝试以下方法:
awk'/regex/{print$1;exit}'
即
disks=$ssh username@${server}df-h|\
awk'/\/ABC/{print{\total\:\$3\,\used\:\$4\,\mountPoint\:\$5\},;exit}&\
ssh用户名@${server}df-h|\
awk'/\/XYZ/{print{\total\:\$3\,\used\:\$4\,\mountPoint\:\$5\},;exit}&\
ssh用户名@${server}df-h|\
awk'/\/RRR/{print{\total\:\$3\,\used\:\$4\,\mountPoint\:\$5\},;exit}&\
ssh用户名@${server}df-h|\
awk'/\/CCC/{print{\total\:\$3\,\used\:\$4\,\mountPoint\:\$5\};exit}'
附言。
有大量的awk示例收集:一个更适合此工作的工具是jq。考虑一下测试人员的注意事项:ABC.XYZ的RR正则表达式应该改变以匹配至少一个本地挂载点:
df -h | jq -R '
select(test("/(ABC|XYZ|RR)/"; "")) |
split("[[:space:]]+"; "") as $line |
{ "total": $line[3], "used": $line[4], "mountPoint": $line[5] }
'
awk不理解JSON语法,因此如果装载点名称包含需要转义才能使输出文档有效的字符,awk不知道该怎么做。相比之下,jq会自动执行输出为有效JSON所需的所有引用和转义,无论您的输入是什么。我现在得到的输出是:976M 92M 834M 10%/ABC 2.0G 3.5M 1.9G 1%/ABC——重复的装入点需要删除一个条目。i、 e./AAA 99G 23G 71G 25%/XYZ 500G 53G 448G 11%/RRROutput我现在得到的是:976M 92M 834M 10%/ABC 2.0G 3.5M 1.9G 1%/ABC——重复的安装点需要删除一个入口。i、 e./aaa99g23g71g25%/xyz500g53g448g11%/rrry您不需要运行df-h4x。运行一次,让您的awk脚本使用模式匹配,如/\/RRR/{do stuff for RRR recs}/\/CCC/{为CCC记录做一些事情}。。。等等。正如我现在写的,你的Q太难读了,你用磁盘=$。。。。东西,只要让awk过滤器工作,然后你可以添加磁盘=$。。最后。要么用评论中提供的信息更新Q,要么删除它们,因为它们看起来像重复信息。在鼠标选择的文本上使用编辑菜单中的{}工具获得正确的文本/数据/errMsgs格式。祝你好运。awk是这个工作的错误工具。使用一个像jq这样的工具,它本机理解如何生成有效的、正确引用的JSON。为什么要编写这段代码?为什么要运行三次不同的df?为什么不运行一次awk,从单个df调用的输出中筛选出您关心的三个挂载点?