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/Usage를 검색해야 합니다 . 어떻게 해야 하나요?rel.log
xargs
답변1
여러 줄 패턴을 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
답변2
파이프에서 한 번에 한 행씩 가져와서 공급하려면 while
with를 사용하십시오 .read
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