我有这个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
如何添加此命令以修改文件名
答案 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]}'