Я столкнулся с таким же поведением. После изучения документации выяснилось, что это известная проблема :
.
Note, however that the one page per file feature may not supported by all devices. Also, since some devices write output files when opened, there may be an extra blank page written (pdfwrite, ps2write, eps2write, pxlmono, pxlcolor,...).
Попробуйте это:
grep -E '[^0-9](3[0-9][0-9]|4[01][0-9]|42[0-5])-' file`
-E
включает расширенные регулярные выражения (, где вам не нужно использовать обратную косую черту в круглых скобках и вертикальную черту)[^0-9](
--не -цифра, за которой следует 3[0-9][0-9]|
число от 300 до 399 или 4[01][0-9]|
число от 400 до 419 или 42[0-5]
число от 420 до 425 )-
после дефиса Предоставление требования к цифре, отличной от -, означает, что вы не соответствуетеABC1234-Something
Использованиеawk
:
awk -F'(^| )...|-' '$2>300 && $2<425 || $4>300 && $4<425' infile
здесь мы устанавливаем разделитель полей на:
^...
или ...
, или , затем на их основе столбец #2 и столбец #4 будут остатками аминокислот, и поэтому мы проверяем, находится ли он в заданном диапазоне.
Инструменты, которые в основном работают с регулярными выражениями, печально известны своей плохой работой с числами. В этом случае я бы предложил использовать что-то вроде awk
вместоgrep
:
$ awk '{ r1 = substr($1,4,3); r2 = substr($2,4,3) } (r1 >= 300 && r1 <= 425) || (r2 >= 300 && r2 <= 425)' file
ARG262-Side ASP368-Side 140,83%
LEU354-Main LYS365-Main 93,6%
ARG346-Side GLU263-Side 93,57%
LEU301-Main ALA247-Main 93,43%
TYR424-Side ASN446-Main 93%
Код awk
извлекает символы дерева, начиная со смещения четыре, из первых двух полей, разделенных пробелами -в каждой строке, и вызывает их r1
и r2
. Я использую substr()
для извлечения чисел в фиксированных позициях в данных полей, но вы также можете просто удалить все цифры, отличные от -, если вы уверены, что единственные цифры — это те, которые вам нужны. интересно. Вы бы сделали это с
r1 = $1; gsub("[^[:digit:]]", "", r1)
и аналогично для r2
с использованием $2
.
Если условие в конце истинно, будет напечатана текущая строка.
grep -E "(^[[:upper:]]{3}(3[0-9]{2}|4([0-1][0-9]|2[0-5]))|\b[[:upper:]]{3}(3[0-9]{2}|4([0-1][0-9]|2[0-5])))" sample.txt
grep -E
с расширенным регулярным выражением.
^[[:upper:]]{3}
:Если строка начинается с трех букв верхнего алфавита
3[0-9]{2}
:Соответствует любой последовательности цифр больше или равной 300
|
:или
4([0-1][0-9]|2[0-5])
:между 400 и 425.
|
:Или (здесь посмотрите на вторую колонку)
\b
:Мир есть границы (Есть пространство)
[[:upper:]]{3}(3[0-9]{2}|4([0-1][0-9]|2[0-5]))
:То же, что и в первом пути.