Калибр был бы моим лучшим предложением, хотя это совсем не прекрасно.
Версия Linux идет и с графическим интерфейсом и с различными инструментами командной строки. Посмотрите преобразуйте электронная книга:
ebook-convert file.pdf file.epub
Использовать while
с 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
Можно передать многострочный шаблон grep, для поиска строки, которая содержит достойный любого из шаблонов. Другими словами, многострочный шаблон является разъединением шаблонов на каждой строке.
print_one_pattern_per_line | grep -f - rel.log
Кстати, Вы могли упростить print_one_pattern_per_line часть. Так как Вы называете awk так или иначе, можно сделать входное соответствие строки в нем. И Ваш код awk может быть написан более простым способом, с помощью замены регулярного выражения для удаления всего до MasterId=
(предполагающий, что существует отдельное проявление MasterId=
на каждой строке, потому что Ваш код соответствует первой инстанции в то время как мой regexp ниже соответствий последний экземпляр).
<instruments.log awk '
!/(^|[[:space:]])Swap/ {
gsub(/.*MasterId=/, "");
$0 = substr($0, 1, index($0, "L")-3);
print;
}' | grep -f - rel.log
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
Это дает мнеsyntax error: unexpected end of file
– 01.02.2012, 01:44