bash: печать awk с печатью - PullRequest
       0

bash: печать awk с печатью

0 голосов
/ 12 марта 2020

Мне нужно получить какой-то шаблон, и далее мне нужно распечатать вывод в этом. В настоящее время я использую приведенную ниже команду, которая работает нормально. Но я люблю исключать использование нескольких каналов и хочу использовать одну команду awk для достижения того же результата. Есть ли способ сделать это с помощью awk?

root@Server1 # cat file
Jenny:Mon,Tue,Wed:Morning
David:Thu,Fri,Sat:Evening

root@Server1 # awk '/Jenny/ {print $0}' file | awk -F ":" '{ print $2 }' | awk -F "," '{ print $1 }'

Mon

Я хочу получить этот вывод, используя одну команду awk. Любая помощь?

Ответы [ 3 ]

0 голосов
/ 12 марта 2020

Вы можете попробовать что-то вроде:

awk -F: '/Jenny/ {split($2,a,","); print a[1]}' file 
0 голосов
/ 12 марта 2020

Для этой конкретной работы я считаю grep немного более устойчивым. Если у вашей компании нет политики нанимать людей по имени Ева. (Попробуйте, если не понимаете.)

grep -oP '^[^:]*Jenny[^:]*:\K[^,:]+' file

Или для сопоставления всего слова:

grep -oP '^[^:]*\bJenny\b[^:]*:\K[^,:]+' file

Или когда вы уверены, что «Дженни» - это полное имя:

grep -oP '^Jenny:\K[^,:]+' file

Вывод:

Mon

Объяснение:

  • Материал до \K говорит сам за себя: он выбирает строку ( s) с нужным именем.
  • [^,:]+ фиксирует день недели (в данном случае Mon).
  • \K обрезает все, что предшествует Mon.
  • -o отключает все, что следует за Mon.
0 голосов
/ 12 марта 2020

Попробуйте это

awk -F'[:,]+' '/Jenny/{print $2}' file.txt 
  • Используется кратное значение -F внутри [ ]
  • + означает одно или несколько, поскольку оно рассматривается как регулярное выражение.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...