Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 文件名差值为1的文件的输出行计数_Linux_Bash_Date - Fatal编程技术网

Linux 文件名差值为1的文件的输出行计数

Linux 文件名差值为1的文件的输出行计数,linux,bash,date,Linux,Bash,Date,我们需要报告写入日志文件7天周期的行数。今天的日志文件名为-[filename].log.1.gz,昨天的日志文件名为[filename].log.2.gz,第7天的日志文件名为[filename].log.7.gz 我希望创建一个可以立即输出数字的脚本,而不是对每行运行zcat[filename].log.1.gz | wc-l命令。我还希望对每个输出值都有一个有意义的消息 我可以编写一个bash脚本,每行代码都可以执行,因为文件的名称是相同的,但我希望有更优雅的东西 而不是这个 zcat p

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

我希望创建一个可以立即输出数字的脚本,而不是对每行运行
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

添加
;执行
在{1..7}中的i的
之后
,将此
(日期--date='$i days ago')
更改为此
(date--date=“$i days ago”)
另见,(U&L.SE),(SO),(AskU)等。谢谢Kamil。较短的版本就是我想要的。正如您所知道的,我是Linux新手,所以感谢您花时间回答一个可能非常简单的问题