unix - 将一个命令的输出作为参数传递给另一个命令

标签 unix shell awk grep design-patterns

我有这个用于:

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/

相关文章:

linux - 按时间顺序捕获 STDOUT 和 STDERR

unix - 在 Unix 脚本中将密码传递给 ssh 提示符

c - c unix 中的套接字编程

java Runtime.getRunTime().exec 和通配符?

bash - 在 AWK 中将空白字段替换为零

c++ - 确定确切的头文件

linux - ENV_VAR=${sh_var} 在 sh 脚本中设置

shell - shell脚本中 'exit 0'是什么意思?

linux - awk 中嵌套的 BEGIN-END block

bash - 使用 AWK 将文本文件中的每个单词换行