Распечатать столбец с AWK

Я пытаюсь найти способ использовать awk, чтобы начать печать только после того, как он найдет параметр поиска и напечатает только пару столбцов, следующих за ним.

Чтобы попытаться объяснить немного лучше, я просматриваю файл журнала, который выводит много информации в виде одной строки. Я хочу взять и экстраполировать только некоторые аспекты этой линии. Т.е. где-то в нем есть большой файл с такой строчкой:

бла-бла-бла, здесь много информации для имени: Джон Доу, и это просто продолжается и не прекращается.

Я хочу, чтобы он выполнял поиск по имени и только распечатывал:

имя: John Doe

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

-1
25.08.2017, 21:20
3 ответа

Это также можно сделать с помощью awk:

$ awk 'match( $0, /name [A-Z][a-z]* [A-Z][a-z]*/ ) { print substr( $0, RSTART, RLENGTH ) }' /path/to/inputfile
1
28.01.2020, 05:07

Самый простой ответ НЕ включает awk. Он будет использовать grepдля вывода любых совпадений слова «имя» и до двух слов, следующих за :

.
grep -o 'name [A-Za-z]* [A-Za-z]*' filename

Переключатель -oвключает только совпадающие части, а не всю строку; и [A-Za-z]*говорит, что вы просите одно слово.

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

2
28.01.2020, 05:07

Perl раствор:

perl -lne '/(name:\s+\w+\s+\w+)/ and print $1'

  • \sсоответствует пробельным символам (пробелам для просмотра, табуляции и т. д.)
  • \wсоответствует буквам и цифрам
  • -lneозначает ничего не печатать (n ), за исключением случаев, когда используется печать, вывести новую строку в конце (l )и выполнить (e )следующее

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

1
28.01.2020, 05:07

Теги

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