Bash 在Unix中,如何仅在目录中的少数文件中搜索字符串
我需要在我的日志文件夹中搜索名为“Account\u Id”的字符串。但是,那里有10000个日志文件,我只需要在过去30天创建的文件中搜索 我需要像这样的输出在一个csv文件。这只是一个例子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
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