【发布时间】:2020-01-17 05:29:07
【问题描述】:
我在下面创建了用于 Jason 输出的 shell 脚本。我得到了正确的结果输出,但也显示了很少的 deplicte 挂载点。我想通过删除重复来获得 uniq 输出
disks=$(ssh username@${server} df -h |\
egrep "/ABC" | \
awk '{print "{" "\"total\":" "\"" $3 "\"" ", \"used\":" "\"" $4"\"" ", \"mountPoint\":" "\""$5"\"" "},"}' && \
ssh username@${server} df -h |\
egrep "/XYZ" | \
awk '{print "{" "\"total\":" "\"" $3 "\"" ", \"used\":" "\"" $4"\"" ", \"mountPoint\":" "\""$5"\"" "},"}'
&& \
ssh username@${server} df -h |\
egrep "/RRR" |\
awk '{print "{" "\"total\":" "\"" $3 "\"" ", \"used\":" "\"" $4"\"" ", \"mountPoint\":" "\""$5"\"" "},"}' && ssh username@${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
【问题讨论】:
-
我现在得到的输出是:976M 92M 834M 10% /ABC 2.0G 3.5M 1.9G 1% /ABC---- 重复的挂载点(需要删除一个条目。即/AAA) 99G 23G 71G 25% /XYZ 500G 53G 448G 11% /RRR
-
我现在得到的输出是:976M 92M 834M 10% /ABC 2.0G 3.5M 1.9G 1% /ABC---- 重复的挂载点(需要删除一个条目。即/AAA) 99G 23G 71G 25% /XYZ 500G 53G 448G 11% /RRR
-
您不需要运行
df -h4 X。运行一次并让您的awk 脚本使用/\/RRR/{do stuff for RRR recs}; /\/CCC/{ do stuff for CCC recs}... etc之类的模式匹配。正如现在所写的那样,您的 Q 太难阅读了,并且您使用disks=$(...)使其复杂化。东西,只要让awk过滤器工作,然后你可以在最后添加disks=$(..)。使用 cmets 中提供的信息更新您的 Q,或者删除它们,因为它们看起来像重复信息。在鼠标选择的文本上使用编辑菜单中的{}工具来获得正确的文本/数据/errMsgs 格式。祝你好运。 -
awk是这个工作的错误工具。使用像jq这样的工具,它本身就知道如何生成有效的、正确引用的 JSON。 -
你为什么要写这段代码?为什么要运行
df三个不同的时间?为什么不运行awk一次,从单个df调用的输出中过滤出您关心的三个挂载点?