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}'
是否足以获得您的预期结果?