如何获取linux awk的文件名并查找结果

时间:2017-05-04 06:49:38

标签: linux bash awk

我有这个linux命令使用管道,在directyrids中查找文件,grep和awk在结果上  命令工作得很好,我缺少的是获取结果文件名的能力,所以我可以知道结果的源文件是什么。

 $ find . -name "*.log" | xargs grep -i TypeOf | grep -v 'Error=APP1' | awk '{split($0,a,"Name="); print a[2]}' | sort -h

如何添加此命令以修改文件名

2 个答案:

答案 0 :(得分:2)

您不需要添加太多内容,但您确实需要删除多项内容。当你使用awk时你永远不需要grep而且split()是awk默认使用的,所以你现有的命令行应该是:

find . -name "*.log" | xargs awk -F"Name=' 'tolower($0)~/typeof/ && !/Error=APP1/ {print $2}' | sort -h

然后打印文件名和行号,只需将它们添加到print语句中:

find . -name "*.log" | xargs awk -F'Name=' 'tolower($0)~/typeof/ && !/Error=APP1/ {print FILENAME, FNR, $2}' | sort -h

答案 1 :(得分:1)

问题在于您的awk计划。您丢弃除第二个以外的所有字段,包括文件名,这应该是第一个。你可能需要使用类似的东西:

awk -F: '{split($0,a,"Name="); print $1, a[2]}'