首页 > 解决方案 > 具有 1 个文件名差异的文件的输出行数

问题描述

我们需要报告写入 7 天周期的日志文件的行数。调用日志文件 -[filename].log.1.gz今天、[filename].log.2.gz昨天到[filename].log.7.gz第 7 天

我希望创建一个可以立即输出数字的脚本,而不是zcat [filename].log.1.gz | wc -l对每一行运行命令。我也希望对每个输出值都有一个有意义的信息

我可以编写一个 bash 脚本来执行每一行,因为文件的名称是相同的,但我希望有一些更优雅的东西

而不是这个

zcat position.log.3.gz | wc -l
zcat position.log.4.gz | wc -l
zcat position.log.5.gz | wc -l
zcat position.log.6.gz | wc -l
zcat position.log.7.gz | wc -l

我希望有更多这样的东西

for i in {1..7}
c=$(zcat position.log.$i.gz | wc -l)
message=$"The count for "
date1=$(date --date='$i days ago')
result=$"$message$date1$c"
echo $result
done 

但是,我无法让它运行。

有任何想法吗?

标签: linuxbashdate

解决方案


您编写带有小修复的脚本:

# for loop starts with a 'do'
for i in {1..7}; do
   # indentation makes everything redable
   # always quote your variables
   c=$(zcat "position.log.$i.gz" | wc -l)
   # The "" is just a string, no '$' sign before it
   message="The count for "
   # The '$i' is literally `$i`, if you want to _expand_ a variable, you have to use "$i"
   date1=$(date --date="$i days ago")
   # same as above, drop the $
   result="$message$date1$c"
   # always quote your variables
   echo "$result"
done 

或者可能稍微短一点:

for i in {1..7}; do
   echo "The count for $(date --date="$i days ago") is $(zcat "position.log.$i.gz" | wc -l)"
done

推荐阅读