Bash 在Unix中,如何仅在目录中的少数文件中搜索字符串

Bash 在Unix中,如何仅在目录中的少数文件中搜索字符串,bash,shell,unix,grep,aix,Bash,Shell,Unix,Grep,Aix,我需要在我的日志文件夹中搜索名为“Account\u Id”的字符串。但是,那里有10000个日志文件,我只需要在过去30天创建的文件中搜索 我需要像这样的输出在一个csv文件。这只是一个例子 File_name Matched_string Line program1.log where account_id1 14 program2.log substr(account_id,1,4) 45 我确实尝试过使用grep-nHi

我需要在我的日志文件夹中搜索名为“Account\u Id”的字符串。但是,那里有10000个日志文件,我只需要在过去30天创建的文件中搜索

我需要像这样的输出在一个csv文件。这只是一个例子

File_name       Matched_string           Line
program1.log    where account_id1         14
program2.log    substr(account_id,1,4)    45
我确实尝试过使用
grep-nHi“Account\u Id”*
但是,它搜索整个目录并花费大量时间

非常感谢您的帮助

DIRECTORY=logs
echo -e "File_name\tMatched_string\tLine"
for i in $(find $DIRECTORY -ctime -30)
do 
    grep -nHIs "Account_Id" $i | awk -F ":" '{print $1"\011" $3 "\011" $2}'
done
由于tab align问题,我不确定您是否能获得问题中指定的输出

更新

在当前目录中开始的一行。它使用
find-exec
awk printf
。可能您需要调整printf格式(
“%-40s\t%-40s\t%-4s\n”
):


grep-Hin Account_Id
find*-mtime-30
|awk-F:“{print$1”\t“$3”\t“$2}”>>xyz.csv

如果您有特定模式中的文件名,那么您可以在find中添加该模式,如下所示


grep-Hin Account_Id
find program*-mtime-30
|awk-F:“{print$1”\t“$3”\t“$2}”>>xyz.csv

注意:我不知道为什么倾斜符号会从我的评论中消失
确保在上面的命令中,在单词find之前和-30之后放置了tilt(键盘按钮bellow to Esc)。

查看
find
命令可能重复的
find . -ctime -30 -exec grep -nHIs "Account_Id" {} \; | awk -F ":" 'BEGIN { printf "%-40s\t%-40s\t%-4s\n" , "File_name", "Matched_string", "Line" } { printf "%-40s\t%-40s\t%-4s\n", $1, $3, $2}' > out.csv