Linux 如何逐行解析df?

Linux 如何逐行解析df?,linux,bash,awk,Linux,Bash,Awk,我想解析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% M

我想解析
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 -hPT | while read line ; do echo "$line" | awk '{print $1, $2, $3, $5, $6, $7}' ;sleep 1 ; done
第一个解决方案:在单个
中,而
循环中:

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")}'

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

mapfile -t lines < <(df -hPT | awk '{print $1, $2, $3, $5, $6, $7}')
for line in "${lines[@]}"; do
    manipulate "$line"
done

mapfile-t行<如果您将IFS设置为\n类似的值:

IFS=$'\n' arr=( $(df -hPT | \
  awk '{print $1, $2, $3, $5, $6, $7}') )
for f in ${arr[@]}; do
  echo ${f[*]}
done
echo "nb elt in arr = ${#arr[@]}"

df-hPT | awk'{print$1,$2,$3,$5,$6,$7}'
是否足以获得您的预期结果?