Files
逐行讀取文件並記住文件中的最後一個位置
我想從另一個文件的輸入中提取日誌文件中的某些行。我正在使用這個小命令來做到這一點:
while read line; do grep "$line" service.log; done < input_strings.txt > result.txt
input_strings.txt
有大約 50 000 個字元串(每行一個)。對於每個字元串,我目前正在搜尋巨大的service.log
文件(大約 2 000 000 行)。因此,假設第 1 個字元串
input_strings.txt
位於service.log
第 10 000 行,這一行被寫入 myresult.txt
. 之後,input_strings.txt
將在 中搜尋的第二個字元串service.log
,但從 的第 1 行開始service.log
。我怎麼能記住我找到第一個條目的最後一行
service.log
?這樣我就可以在那裡開始第二次搜尋了?
如果您想獲得匹配項,那麼您根本不需要使用循環。
grep
只使用一個命令會快得多:grep -Ff input_strings service.log > results.txt
也就是說,如果您想按字面意思執行您在問題中所說的內容,那麼您可以使用變數來跟踪找到最後一個匹配項的行:
LINE_NUMBER=0 while read LINE; do # Search for the next match starting at the line number of the previous match MATCH="$(tail -n+${LINE_NUMBER} "service.log" | grep -n "${LINE}" | head -n1)"; # Extract the line number from the match result LINE_NUMBER="${MATCH/:*/}"; # Extract the matching string from the match result STRING="${x#*:}"; # Output the matching string echo "${STRING}"; done < input_strings.txt > result.txt