Как мне использовать grep для генерации

Как бы я создать список, который отображает самые низкие цифры в файле?

ех.

  1. Элемент списка 2476 Джеки Вудсон: менеджер:: продажи:: 01.05.59: 110000
  2. Элемент списка 2000 Джек Уилсон: директор:: счета:: 19.0455: 80000
  3. Элемент списка 7700 Уилсон Али: исполнитель:: счета:: 30.0856: 90000
  4. Элемент списка 3364 Билл Уилкокс: менеджер:: продажи:: 12.1255: 65000

  5. Элемент списка 4290 Нил О'Брайан: руководитель:: счета:: 01/01/59: 100000

  6. Элемент списка 2000 Уилсон Альберт: Председатель:: производства:: 12/12/50: 125000

Я хочу перечислить диапазон показа между 60000 и 9000 и перечислить только тех, кто использует grep

я пробовал

grep "[69]" .....$ filename

3 ответа

grep не делает числовых сравнений, и не является инструментом для использования здесь. Я бы использовал:

sort --field-separator=":" --numeric-sort --reverse --key=7 --ignore-leading-blanks filename | \
    tail --lines=3  | \
    sort --field-separator=":" --numeric-sort --key=7 --ignore-leading-blanks

grep инструмент сопоставления строк, что означает, что он сопоставляет только те строки, которые имеют определенный текст. То, что вы хотите, это утилита обработки текста, такая как awk это может сделать сравнения.

$ awk -F ':' '$NF > 60000 && $NF<90000' list.txt                                  
List item 2000 Jack Wilson :director: :accounts: :04/19/55: 80000
List item 3364 Bill Wilcocks :manager: :sales: :12/12/55: 65000

Как это работает, просто:

  • -F ':' говорит awk обрабатывать каждую строку как набор слов, разделенных двоеточиями
  • '$NF > 60000 && $NF<90000' посмотрим на последнее слово $NF и проверьте, что оно больше 60000 И (&& часть) 90000.
grep -P '\b[6-8]\d{4}\s*$' ex3
Другие вопросы по тегам