如何用bash更新文件行?
发布时间:2020-12-16 01:48:57 所属栏目:安全 来源:网络整理
导读:我有一个用于磁盘使用记录的小脚本,如下所示: #!/bin/bashdate=$(date +"%d.%m.%Y")while read -r filesystem;dofilesys=${filesystem}df -P | tr -d "%" | awk '$6=="'"$filesys"'" {print"'"$date"'"",",$6","$5}' /root/disk.csvdone "/root/disklist" /
我有一个用于磁盘使用记录的小脚本,如下所示:
#!/bin/bash date=$(date +"%d.%m.%Y") while read -r filesystem; do filesys=${filesystem} df -P | tr -d "%" | awk '$6=="'"$filesys"'" {print"'"$date"'"",",$6","$5}' >> /root/disk.csv done < "/root/disklist" /根/ disklist: / /dev/mapper/map1 /root/disk.csv: 18.05.2015,/,18 18.05.2015,/dev/mapper/map1,1 当我运行此脚本时,打印到disk.csv的新行.我需要查看实际数据,因此当我运行此脚本时,我需要更新到相同日期(不是插入)的同一行. 不是这样的: 运行 – 18.05.2015 13:00 18.05.2015,1 运行 – 18.05.2015 15:00 18.05.2015,1 18.05.2015,19 18.05.2015,5 运行此脚本时,我需要更改旧行(如果日期相同).我怎样才能做到这一点? 解决方法
小心:你运行df -P没有参数,(将生成你所有磁盘的完整统计信息),你/ root / disklist中有一行.
所以有我的目的(使用最近的bash): disklist=( /home /usr /var ) [ -f "/root/disklist" ] && disklist=($(</root/disklist)) file="/root/disk.csv" printf -v myDate "%(%d.%m.%Y)T" -1 sed -e "/^$myDate,/d" $file >$file.tmp df -P "${disklist[@]}" | sed -ne 's/^.* ([0-9]+)% (.*)$/'$myDate',2,1/p' >>$file.tmp read osize < <(stat -c%s $file) read nsize < <(stat -c%s $file.tmp) ((nsize+=${#disklist[@]}*2)) # So length of % field could become smaller [ $nsize -ge $osize ] && mv $file.tmp $file || rm -v $file.tmp >&2 sed -e“/ ^ $myDate,/ d”-i $文件将内联编辑$file以删除所有以18.05.2015开头的行,然后附加df -P的重新格式化输出. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |