Unix команда для разбора строки - PullRequest
0 голосов
/ 29 июня 2019

Я пытаюсь найти команду для разбора следующего содержимого файла:

Operation=GET
Type=HOME
Counters=CacheHit=0,Exception=1,Validated=0

Мне нужно извлечь Exception=1 в свою строку. Я возился с awk, sed и grep, но не добился большого прогресса. У кого-нибудь есть советы по использованию какой-либо команды unix для этого?

Спасибо

Ответы [ 3 ]

2 голосов
/ 29 июня 2019

Поскольку ваш файл близок к синтаксису bash, есть небольшой забавный трюк, который вы можете сделать, чтобы сам bash анализировал файл. Сначала используйте какую-нибудь программу, например tr, чтобы преобразовать входные данные в нечто, что может проанализировать bash, а затем «истолковать» то, что создаст переменные оболочки, которые вы можете развернуть позже, чтобы получить значения.

source <(tr , $'\n' < file_name_goes_here)
echo $Exception
0 голосов
/ 29 июня 2019

Нет необходимости использовать сочетание команд.

awk -F, 'NR==2 {print RS$1}' RS="Exception"  file
Exception=1

Здесь мы разбиваем строку по ключевому слову, которое ищем RS="Exception"
Если в строке две записи (только когда ключевое слово найдено), то
напечатать первое поле, разделенное командой, с селектором записи.

PS Это работает, только если у вас есть одно Exception поле

0 голосов
/ 29 июня 2019

Много способов сделать это.Вот одно из предположений, что файл называется «file.txt».Захватите нужную строку, замените все, начиная с начала строки и заканчивая исключением, просто Except, затем вытащите первое поле, используя запятую в качестве разделителя.

$ grep Exception file.txt | sed 's/.*Except/Except/g' | cut -d, -f 1
Exception=1

Если вы хотите использовать gawk:

$ grep Exception file.txt | sed 's/.*Except/Except/g' | gawk -F, '{print $1}'
Exception=1

или просто используя grep и sed:

$ grep Exception file.txt | sed 's/.*\(Exception=[0-9]*\).*/\1/g'
Exception=1

или, как @sheltter напомнил мне:

$ egrep -o "Exception=[0-9]+" file.txt
Exception=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...