linux - 具有 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
但是,我无法让它运行。
有任何想法吗?
解决方案
您编写带有小修复的脚本:
# 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
推荐阅读
- jquery - 如何使用 AJAX 在索引视图上喜欢对象?
- integromat - 如何从 json webhook 合并 integromat 中的数据以显示在谷歌表格中
- java - Java Runtime exec() 不解析环境变量
- java - 无法在 mysql 表字段中存储完整的 json 字段
- r - 复制后data.table中的引用问题
- sql-server - 疑难解答 将 varchar 值转换为数据类型 int 时转换失败
- php - 插入 PHP 和 SQL 的默认值
- javascript - 再次按回车点击按钮
- javascript - 基本反应:为什么本地存储中的变量在短暂成为所需值后重置为未定义?
- python - 在 django 中上传和查看 pdf