【发布时间】:2014-04-18 12:13:15
【问题描述】:
我有一个 while 循环,它读取 ftp 日志文件并将其放入数组中,这样我就可以搜索数组并匹配/搜索流。不幸的是,while 循环要花很长时间才能通过文件,它是一个非常大的文件,但必须有另一种更快的方法来执行此操作。
# read file into array for original search results
while read FTP_SEARCH
do
ogl_date[count]=`echo $FTP_SEARCH | awk '{print $1, $2}'`
ogl_time[count]=`echo $FTP_SEARCH | awk '{print $3}'`
ogl_server[count]=`echo $FTP_SEARCH | awk '{print $4}'`
ogl_id[count]=`echo $FTP_SEARCH | awk '{print $5}'`
ogl_type[count]=`echo $FTP_SEARCH | awk -F '[' '{print $1}' | awk '{print $5}'`
ogl_pid[count]=`echo $FTP_SEARCH | awk -F'[' '{print $2}' | awk -F']' '{print $1}'`
ogl_commands[count]=`echo $FTP_SEARCH | awk '{
for(i = 6; i <= NF; i++)
print $i;
}'`
let "count += 1"
done < /tmp/ftp_search.14-12-02
Dec 1 23:59:03 sslmftp1 ftpd[4152]: USER xxxxxx
Dec 1 23:59:03 sslmftp1 ftpd[4152]: PASS password
Dec 1 23:59:03 sslmftp1 ftpd[4152]: FTP LOGIN FROM 172.19.x.xx [172.19.x.xx], xxxxxx
Dec 1 23:59:03 sslmftp1 ftpd[4152]: PWD
Dec 1 23:59:03 sslmftp1 ftpd[4152]: CWD /test/data/872507/
Dec 1 23:59:03 sslmftp1 ftpd[4152]: TYPE Image`
Dec 1 23:59:03 sslmftp1 ftpd[4152]: PASV
Dec 1 23:59:04 sslmftp1 ftpd[4152]: NLST
Dec 1 23:59:04 sslmftp1 ftpd[4152]: FTP session closed
Dec 1 23:59:05 sslmftp1 ftpd[4683]: USER xxxxxx
Dec 1 23:59:05 sslmftp1 ftpd[4683]: PASS password
Dec 1 23:59:05 sslmftp1 ftpd[4683]: FTP LOGIN FROM 172.19.1.24 [172.19.x.xx], xxxxxx
Dec 1 23:59:05 sslmftp1 ftpd[4683]: PWD
Dec 1 23:59:05 sslmftp1 ftpd[4683]: CWD /test/data/944837/
Dec 1 23:59:05 sslmftp1 ftpd[4683]: TYPE Image
【问题讨论】:
-
请张贴来自 ftp_search.14-12-02 的示例行。多次调用
awk来解析每一行是让你慢下来的原因。在bash中有很多更好的解析方法,但我需要看看一行是什么样子才能建议最好的方法。 -
或者,由于没有对其他外部程序的任何调用,它可以在 1 个 awk 程序中完成。需要样本数据。祝你好运。
-
Dec 1 23:59:03 sslmftp1 ftpd[4152]: USER xxxxxx Dec 1 23:59:03 sslmftp1 ftpd[4152]: PASS password Dec 1 23:59:03 sslmftp1 ftpd[4152]: FTP LOGIN FROM 172.19.x.xx [172.19.x.xx], xxxxxx Dec 1 23:59:03 sslmftp1 ftpd[4152]: PWD Dec 1 23:59:03 sslmftp1 ftpd[4152]: CWD /test/data/872507/ Dec 1 23:59:03 sslmftp1 ftpd[4152]: TYPE Image -
抱歉,我的评论中没有换行符,但它是 12 月初的新行
-
您可以将输出添加到问题本身,而不是在评论中。
标签: bash while-loop