awk + print line только если первое поле начинается со строки как Linux1


15

как напечатать строку, если первое поле начинается с Linux1

например:

  echo Linux1_ver2  12542 kernel-update  |   awk '{if ($1 ~ Linux1 ) print $0;}'

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

пример строк:

Linux1-new  36352 Version:true
Linux1-1625543  9847
Linux1:16254 8467563 

примечание - пробел или табуляция могут быть до первой подачи

Ответы:


15

В одну сторону:

echo "Linux1_ver2  12542 kernel-update"  |  awk '$1 ~ /^ *Linux1/'

$ 1 и ^ избыточны. Ваше предложение не распространяется на вкладки.
Хауке Лагинг

@HuakeLaging Почему вы думаете, что $ 1 и ^ избыточны? Я вполне уверен, что оба требуются, чтобы первое слово сопоставлялось только с тем, чтобы совпадение было привязано в начале (например, «mLinux» мог быть сопоставлен с / Linux1 /, но не с / ^ Linux /).
Ник Булл,

19

awk игнорирует начальные пробелы при назначении полей. Команда по умолчанию - печать.

awk '$1 ~ /^Linux1/'

Это то, что вы хотите.

Детальное объяснение:

  • $ 1 говорит awk посмотреть на первый «столбец».
  • ~ сообщает awk о соответствии регулярного выражения /..../ является регулярным выражением.
  • Внутри RE находится строка Linux и специальный символ ^.
  • ^ заставляет RE совпадать с самого начала (в отличие от совпадения в любом месте строки).

Если смотреть вместе: Awk будет сопоставлять регулярное выражение с «Linux» в начале первого столбца.


2

Это должно работать для этого конкретного случая.

awk '/^[[:blank:]]*Linux1/ {print}'

но если пространство до Linux1, то оно не будет совпадать
yael

@yael Я сделал правку, чтобы исправить это.
Хауке Лагинг

+1 Любому, кто интересуется, что делает этот синтаксис: он говорит: «делайте вещи внутри фигурных скобок, только если регулярное выражение соответствует этой строке».
Мердад
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.