我有一個while循環,它讀取一個ftp日誌文件並將其放入一個數組中,這樣我就可以搜索數組並匹配/搜索流。不幸的是,while循環是永久性的通過文件,它是一個非常大的文件,但必須有另一個更快的方式來做到這一點。Bash腳本/ 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'中有很多更好的解析方法,但是我需要看看哪一行看起來像是建議最好的方法。 – chepner
或者,由於沒有其他外部程序的調用,它可以在1個awk程序中完成。示例數據是必需的。祝你好運。 – shellter
'Dec 1 23:59:03 sslmftp1 ftpd [4152]:USER xxxxxx Dec 1 23:59:03 sslmftp1 ftpd [4152]:PASS密碼 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' – cycloxr