我有这个用于:
for i in `ls -1 access.log*`; do tail $i |awk {'print $4'} |cut -d: -f 1 |grep - $i > $i.output; done
ls 将给出 access.log、access.log.1、access.log.2 等
tail 会给我每个文件的最后一行,如下所示: 192.168.1.23 - - [08/Oct/2010:14:05:04 +0300]
等等等等
awk+cut 将提取日期(2010 年 10 月 8 日 - 但每个 access.log 中都不同),这将允许我对其进行 grep 并将输出重定向到一个单独的文件。
但我似乎无法将 awk+cut 的输出传递给 grep。
造成这一切的原因是这些访问日志包含具有多个日期的行(10 月 6 日、10 月 7 日、10 月 8 日),而我只需要具有最新日期的行。
我怎样才能实现这个目标?
谢谢。
最佳答案
作为旁注,tail
显示最后 10 行。
一个可能的解决方案是这样grep
:
for i in `ls -lf access.log*`; do grep $(tail $i |awk {'print $4'} |cut -d: -f 1| sed 's/\[/\\[/') $i > $i.output; done
关于unix - 将一个命令的输出作为参数传递给另一个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4023151/