我在运行日志文件时遇到问题。
我希望使用它ls
来创建日志目录中的文件列表,并grep
针对文件运行的特定实例/时间进行运行。我只想要每个文件的最后一行,所以我希望命令tail -1
运行grep
提供的文件列表。
我尝试过多种代码组合,但目前还没有成功;由于我花了很多时间,现在它更多的是好奇而不是有用。以下是我尝试过的几个例子:
ls | grep 2011_.._.._.._35_.* | tee >(tail -1)
ls | tee >(grep 2011_.._.._.._35_.*) | tail -1
此外,如果可能的话,我想使用单个命令行执行此操作,而不是创建脚本并运行循环。
答案1
修改!
你只想要最后一行每个日志档案 ...
您需要的命令xargs
不是tee
:
ls | grep '2011_.._.._.._35_.*' | xargs -n 1 -- tail -1
或者
ls -1 2011_??_??_??_35_* | xargs -n 1 -- tail -1
tail -1
这将针对通过命令(第一种情况)或 ls 命令找到的每个文件(第二种情况)调用该命令grep
。请注意,如果文件包含空格或换行符,则此方法不起作用。如果您需要该情况的答案,请添加注释。
编辑 对于您的评论:
ls -1 2011_??_??_??_35_* | xargs -n 1 -I FILE -- sh -c 'echo ; echo "FILE"; tail -1 "FILE"'
稍微复杂一点,但也能处理名称中带有空格的文件。
"FILE"
命令序列中的每个命令都echo ; echo "FILE"; tail -1 "FILE"
将被一行输出替换ls
。此命令序列将被传递到 shell 然后执行。