我编写了一个简短的 bash 脚本来监视从循环接收结果的文件中的行计数增长(wc -l)。
因此:
printf "Name of file to monitor\n"
read file
printf "How long to monitor file growth in minutes\n"
read time
printf "Interval between loops\n"
read s
a=$((time * 60)) # works out overall time in seconds
b=$((a / s)) # no of loops
for i in $( eval echo {0..$b} )
do
printf "Loop number: %-10.2d Interval: %-10.2d Line Count: %-10.2d.\n" $i $s $'wc -l $file'
sleep $s
done
printf "finished\n"
我对该行的最后一个参数有疑问printf
。我不确定如何在函数wc
内正确陈述该函数printf
。
答案1
当您调用 时wc -l filename
,它会在其中的行数旁边输出文件名。当命令替换没有用双引号括起来时,它会进行分词,即如果其中有空格,则会扩展为多个单词。最后,printf
一遍又一遍地使用该格式,直到它消耗掉所有给定的参数(看这里)。
正确的做法是:
printf "Loop number: %-10.2d Interval: %-10.2d Line Count: %-10.2d \n" $i $s $l "$(wc -l <"$file")"