猿问

如何逐行解析df?

我想从解析输出df,所以我做的


arr=( $(df -hPT | awk '{print $1, $2, $3, $5, $6, $7}') )

for f in ${arr[@]}; do echo ${f[*]};sleep 1;done

但是我明白了


Filesystem

Size

Avail

Use%

Mounted

devtmpfs

7.8G

7.8G

0%

/dev

tmpfs

7.8G

7.7G

3%

我曾希望的地方


Filesystem Size Avail Use% Mounted

devtmpfs 7.8G 7.8G 0%

/dev tmpfs 7.8G 7.7G 3%

我的计划是$f为每行设置一个数组,因此我可以操纵每行和printf输出。


问题


有什么想法可以获取awk每df行输出的数组吗?


繁星淼淼
浏览 307回答 3
3回答

缥缈止盈

解决方案1:在单循环中while:df -hPT | while read first second third fourth fifth sixth seventhdo   echo $first $second $third $fifth $sixth $seventh   sleep 1done解决方案2:跟随单身awk可能会帮助您。df -hPT | awk '{print $1, $2, $3, $5, $6, $7;system("sleep 1")}'

小唯快跑啊

在读取时使用...循环df -hPT | while read line ; do echo "$line" | awk '{print $1, $2, $3, $5, $6, $7}' ;sleep 1 ; done

暮色呼如

您可以使用内置的bashlines将文件/流的行存储到数组中:mapfile -t lines < <(df -hPT | awk '{print $1, $2, $3, $5, $6, $7}')for line in "${lines[@]}"; do&nbsp; &nbsp; manipulate "$line"done需要从流程替换中重定向,因此我们不会引入任何子外壳。您已经看到了在for循环中未能对变量进行引用时会发生什么:始终对变量进行引用(除非您确切知道为什么不这样做)。
随时随地看视频慕课网APP
我要回答