Grep
xargs grep 建議
grep -v "\<Swap" instruments.log | awk '{ idx=index($0, "MasterId="); masterId=substr($0, idx+length("MasterId=")+1); masterId=substr(masterId,1,index(masterId,"L")-3); print masterId; }' | xargs grep rel.log
我需要搜尋使用
awk
中的每個 MasterId/輸出或其他內容。 我怎樣才能做到這一點?rel.log``xargs
使用
while
withread
一次從管道中獲取一條線,並將其饋送到grep
.grep -v "\<Swap" instruments.log | \ awk '{ idx=index($0, "MasterId="); masterId=substr($0, idx+length("MasterId=")+1); masterId=substr(masterId,1,index(masterId,"L")-3); print masterId; }' |\ while read line; do grep -- "$line" rel.log done
您可以將多行模式傳遞給 grep,以搜尋包含任何模式匹配項的行。換句話說,多線模式是每條線上模式的分離。
print_one_pattern_per_line | grep -f - rel.log
順便說一句,您可以簡化 print_one_pattern_per_line 部分。由於無論如何您都在呼叫 awk,因此您可以在其中進行輸入行匹配。並且您的 awk 程式碼可以以更簡單的方式編寫,使用正則表達式替換來刪除所有內容
MasterId=
(假設MasterId=
每行出現一次,因為您的程式碼匹配第一個實例,而我下面的正則表達式匹配最後一個實例)。<instruments.log awk ' !/(^|[[:space:]])Swap/ { gsub(/.*MasterId=/, ""); $0 = substr($0, 1, index($0, "L")-3); print; }' | grep -f - rel.log