Linux 如何在shell脚本中将每日磁盘使用情况导出为csv格式?

Linux 如何在shell脚本中将每日磁盘使用情况导出为csv格式?,linux,shell,csv,diskspace,Linux,Shell,Csv,Diskspace,我的脚本如下。当我们运行脚本时,它会自动将磁盘空间使用情况保存在单独的单元格中 SIZES_1=`df -h | awk 'FNR == 1 {print $1","$2","$3","$4","$5","$6}'` SIZES_2=`df -h | awk 'FNR == 2 {print $1","$2","$3","$4","$5","$6}'` SIZES_3=`df -h | awk 'FNR == 3 {print $1","$2","$3","$4","$5","$6}'` SIZ

我的脚本如下。当我们运行脚本时,它会自动将磁盘空间使用情况保存在单独的单元格中

SIZES_1=`df -h | awk 'FNR == 1 {print $1","$2","$3","$4","$5","$6}'`
SIZES_2=`df -h | awk 'FNR == 2 {print $1","$2","$3","$4","$5","$6}'`
SIZES_3=`df -h | awk 'FNR == 3 {print $1","$2","$3","$4","$5","$6}'`
SIZES_4=`df -h | awk 'FNR == 4 {print $1","$2","$3","$4","$5","$6}'`
SIZES_5=`df -h | awk 'FNR == 5 {print $1","$2","$3","$4","$5","$6}'`
SIZES_6=`df -h | awk 'FNR == 6 {print $1","$2","$3","$4","$5","$6}'`
SIZES_7=`df -h | awk 'FNR == 7 {print $1","$2","$3","$4","$5","$6}'`
SIZES_8=`df -h | awk 'FNR == 8 {print $1","$2","$3","$4","$5","$6}'`
echo `date +%Z-%Y-%m-%d_%H-%M-%S` >>/home/jeevagan/test_scripts/sizes/excel.csv
echo "$SIZES_1" >> /home/jeevagan/test_scripts/sizes/excel.csv
echo "$SIZES_2" >> /home/jeevagan/test_scripts/sizes/excel.csv
echo "$SIZES_3" >> /home/jeevagan/test_scripts/sizes/excel.csv
echo "$SIZES_4" >> /home/jeevagan/test_scripts/sizes/excel.csv
echo "$SIZES_5" >> /home/jeevagan/test_scripts/sizes/excel.csv
echo "$SIZES_6" >> /home/jeevagan/test_scripts/sizes/excel.csv
echo "$SIZES_7" >> /home/jeevagan/test_scripts/sizes/excel.csv
echo "$SIZES_8" >> /home/jeevagan/test_scripts/sizes/excel.csv
这个脚本适合我的机器


我的疑问是,如果其他人的机器有许多文件系统,我的脚本将无法获取所有使用的文件系统。如何自动获取所有文件系统?

假设您需要所有文件系统,您可以将其简化为:

printf '%s\n' "$(date +%Z-%Y-%m-%d_%H-%M-%S)" >> excel.csv
df -h | awk '{print $1","$2","$3","$4","$5","$6}' >> excel.csv

我会简化为

{ date +%Z-%F_%H-%M-%S; df -h | tr -s ' ' ','; } >> excel.csv
  • 对命令进行分组,以便只需要一个重定向
  • 压缩空格并使用
    tr
  • 不需要
    echo`date`
    或类似内容:它与
    date
  • 日期+%Y-%m-%d
    日期+%F
请注意,
df-h
输出的第一行有一个小缺陷,它最初看起来像这样

已使用的文件系统大小可用率已安装%
在最后一列的标题中有空格,因此

文件系统,大小,已用,可用,使用%,已装入,打开
加上一个逗号。然而,最初的awk解决方案只是切断了该行的最后一个字。类似地,路径中的空间也会导致此解决方案失败

要解决逗号问题,您可以运行

sed -i 's/Mounted,on$/Mounted on/' excel.csv
时不时地


另一方面,替换awk中的所有字段分隔符,而不是

awk '{print $1","$2","$3","$4","$5","$6}'
你可以用

awk 'BEGIN { OFS = "," } { $1 = $1; print }'
或者,更短一些

awk -v OFS=',' '{$1=$1}1'

对于标题问题,只需使用
sed-n'2,$p'