Фильтрация вывода команды Linux - PullRequest
12 голосов
/ 17 января 2011

Мне нужно получить строку, основанную на значении столбца, так же, как запросить базу данных. У меня есть вывод команды, как это,

Имя ID Mem VCPUs State
Время (с)

Домен-0 0 15485 16 р ----- 1779042,1

prime95-01 512 1
-b ---- 61,9

Здесь мне нужно перечислить только те строки, где состояние равно "r". Как то так,

Домен-0 0 15485 16
r ----- 1779042,1

Я пытался использовать «grep» и «awk», но все равно не смог добиться успеха.

Пожалуйста, помогите мне в этом вопросе.

С уважением, Raaj

Ответы [ 5 ]

9 голосов
/ 17 января 2011

Существует множество инструментов, доступных для фильтрации.

Если вам нужны строки только с "r -----", grep более чем достаточно:

command | grep "r-----"

Или

cat filename | grep "r-----"

Кавычки необязательны, но могут помешать отключению grep над символами

2 голосов
/ 17 января 2011

grep может обработать это для вас:

yourcommand | grep -- 'r-----'

Часто полезно сохранить (полный) вывод в файл для последующего анализа.Для этого я использую tee.

yourcommand | tee somefile | grep 'r-----'

Если вы хотите найти строку, содержащую «-b ----» чуть позже без повторного запуска yourcommand, вы можете просто использовать:

grep -- '-b----' somefile

Нет необходимости в cat здесь!

Я рекомендую ставить -- после вашего звонка на grep, так как ваши шаблоны содержат знаки минус и если знак минусв начале шаблона это будет выглядеть как аргумент опции для grep, а не как часть шаблона.

2 голосов
/ 17 января 2011

попробовать:

awk '$5 ~ /^r.*/ { print }' 

Как это:

cat file | awk '$5 ~ /^r.*/ { print }' 
1 голос
/ 17 января 2011

grep solution:

command | grep -E "^([^ ]+ ){4}r"

Что это делает (-E включает расширенное регулярное выражение):

Первая каретка (^) соответствует началу строки.[^] соответствует ровно одному вхождению непробельного символа, следующий модификатор (+) позволяет ему также соответствовать большему числу вхождений.

Сгруппированный вместе с завершающим пробелом в ([^] +), он соответствуетлюбая последовательность непробельных символов, за которой следует один пробел.Модификатор {4} требует, чтобы эта конструкция соответствовала ровно четыре раза.

Единственный «r» - это буквальный символ, который вы ищете.

В простых словах это можно записать так:«Если строка начинается с <^> четырьмя строками, за которыми следует пробел <([^] +) {4}>, а следующий символ -, строка совпадает.»

Очень хорошее введениев регулярные выражения был записан Ян Гойваэртс (http://www.regular -expressions.info / quickstart.html).

0 голосов
/ 08 августа 2017

Фильтрация по awk cmd в linux: -

Сначала найдите столбец для этого cmd и сохраните файл 2: -

awk '/ Domain-0 0 15485 /' file1> file2

Выход: -

Домен-0 0 15485 16 r ----- 1779042,1

после этого awk cmd в файле2: -

awk '{print $ 1, $ 2, $ 3, $ 4, "\ n", $ 5, $ 6}' file2

Окончательный результат: -

Домен-0 0 15485 16

r ----- 1779042.1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...