Shell df-h需要uniq输出,并删除不精确的值

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

我已经用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\}' 我现在得到的结果是:

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调用的输出中筛选出您关心的三个挂载点?