使用 wc -l 循环监视行数增长

使用 wc -l 循环监视行数增长

我编写了一个简短的 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")"

相关内容