У меня есть файл. Мне нужно использовать grep для печати всех строк, количество которых находится в диапазоне от 100 до 500 [закрыто]

-2
27.12.2016, 22:13
1 ответ

Довольно легко на perl, если вы не привязаны к использованию grep. Если строка совпадает с или , за которой следует 38=, поместите все символы до следующего | в $1. А затем просто печатайте строки, где 1 доллар составляет от 100 до 500.

$ perl -ne 'if(/[\|,]38=(.*)\|/&&$1>99&&$1<501){print $_}' q
Order:916070,35=D|40=1|54=|60=20130624-09:45:02.046|38=234|34=388|11=|59=0|52=20130624-09:45:02.046|8=FIX.4.4|100=MBTX|43=Y|9=205|553=2453|49=11342|21=1|56=MBT|55=/GCQ3|10=085|1=30532|114=Y|
Order:385327,38=190|34=388|11=|35=D|40=1|60=20130624-09:45:02.046|54=|8=FIX.4.4|43=Y|100=MBTX|59=0|52=20130624-09:45:02.046|553=2453|49=11342|21=1|9=205|55=/GCQ3|10=085|1=30532|114=Y|56=MBT|
$

Используя grep, мы не имеем > и < операторов (насколько я знаю), ищите тот же шаблон 38=, за которым следует либо [1-4][0-9][0-9] (100-499), либо 500.

$ grep -E '[,|]38=([1-4][0-9][0-9]|500)\|' q
Order:916070,35=D|40=1|54=|60=20130624-09:45:02.046|38=234|34=388|11=|59=0|52=20130624-09:45:02.046|8=FIX.4.4|100=MBTX|43=Y|9=205|553=2453|49=11342|21=1|56=MBT|55=/GCQ3|10=085|1=30532|114=Y|
Order:385327,38=190|34=388|11=|35=D|40=1|60=20130624-09:45:02.046|54=|8=FIX.4.4|43=Y|100=MBTX|59=0|52=20130624-09:45:02.046|553=2453|49=11342|21=1|9=205|55=/GCQ3|10=085|1=30532|114=Y|56=MBT|
$
1
28.01.2020, 05:17

Теги

Похожие вопросы