为了账号安全,请及时绑定邮箱和手机立即绑定

如何逐行解析df?

如何逐行解析df?

繁星淼淼 2021-04-09 17:11:59
我想从解析输出df,所以我做的arr=( $(df -hPT | awk '{print $1, $2, $3, $5, $6, $7}') )for f in ${arr[@]}; do echo ${f[*]};sleep 1;done但是我明白了FilesystemSizeAvailUse%Mounteddevtmpfs7.8G7.8G0%/devtmpfs7.8G7.7G3%我曾希望的地方Filesystem Size Avail Use% Mounteddevtmpfs 7.8G 7.8G 0%/dev tmpfs 7.8G 7.7G 3%我的计划是$f为每行设置一个数组,因此我可以操纵每行和printf输出。问题有什么想法可以获取awk每df行输出的数组吗?
查看完整描述

3 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

解决方案1:在单循环中while:


df -hPT | while read first second third fourth fifth sixth seventh

do

   echo $first $second $third $fifth $sixth $seventh

   sleep 1

done

解决方案2:跟随单身awk可能会帮助您。


df -hPT | awk '{print $1, $2, $3, $5, $6, $7;system("sleep 1")}'


查看完整回答
反对 回复 2021-04-16
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

在读取时使用...循环

df -hPT | while read line ; do echo "$line" | awk '{print $1, $2, $3, $5, $6, $7}' ;sleep 1 ; done


查看完整回答
反对 回复 2021-04-16
?
暮色呼如

TA贡献1853条经验 获得超9个赞

您可以使用内置的bashlines将文件/流的行存储到数组中:


mapfile -t lines < <(df -hPT | awk '{print $1, $2, $3, $5, $6, $7}')

for line in "${lines[@]}"; do

    manipulate "$line"

done

需要从流程替换中重定向,因此我们不会引入任何子外壳。


您已经看到了在for循环中未能对变量进行引用时会发生什么:始终对变量进行引用(除非您确切知道为什么不这样做)。


查看完整回答
反对 回复 2021-04-16
  • 3 回答
  • 0 关注
  • 306 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信