Подберите конкретную букву и напечатайте слово после этого, используя SED - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть файл "Log.txt", который выглядит следующим образом:

 bla bla.. line1   
 bla bla.. line2  
 bla bla.. lineN     
:000000 ... 239e670... A  bla1.txt  
:000000 ... 76fd777... M  bla2.txt  
:000000 ... e69de29... A  bla3.txt 

Допустим, я ищу буквы «А» и «М».

Какя буду искать его ТОЛЬКО в 4-м поле или строке, которая содержит только эту конкретную букву.Мне нужно сопоставить только слова «А» и «М» и распечатать имя файла после этого.т.е. мне нужно получить окончательный вывод, как показано ниже:

A   bla1.txt
M   bla2.txt
A   bla3.txt  

Я использовал awk, чтобы сопоставить 4-й столбец с A и M и вывести следующее слово.но не получая ожидаемый результат.Я также получаю дополнительные линии Bla Bla.

Кто-нибудь знает, как этого добиться с помощью sed?

Ответы [ 4 ]

0 голосов
/ 22 декабря 2018

Это может работать для вас (GNU sed):

sed 's/^\(\S*\s\)\{3\}\([AM]\s\)/\2/p;d' file

Соответствует четвертому полю, равному A или M, и, если это так, удалите первые три поля и напечатайте оставшееся.

0 голосов
/ 21 декабря 2018

В соответствии с вашим входным файлом и ожидаемым результатом, пожалуйста, попробуйте ниже, используя awk:

awk '{if ($4 == "A" || $4 == "M") {print $4,$5}}' log.txt

Выход:

A bla1.txt
M bla2.txt
A bla3.txt
0 голосов
/ 21 декабря 2018

awk для этого:

awk '$4 ~ /^[AM]$/ { print $4," ",$5 }' Log.txt

sed для него:

sed -En '/^([^ ]+ ){3}[AM]/ { s/^([^ ]+ ){3}([AM] .*)/\2/; p; }' Log.txt

Оба эти подтверждения подтверждают, что A или M находится в 4-мполе.

0 голосов
/ 21 декабря 2018

Awk на самом деле может сделать вашу работу, просто нужно добавить условие:

awk "/ (A|M) /{print $4,$5}" Log.txt

Что касается sed, вы можете сделать это:

sed -nr "/ (A|M) /{s/.*((A|M)\s+.*)$/\1/;p}" Log.txt

Не уверен, как ваши реальныеданные выглядят так, но, думаю, вы их получите и откорректируете команду в соответствии с ними.

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