awk + print line somente se o primeiro campo começar com string como Linux1

16

como imprimir a linha, caso o primeiro campo comece com Linux1

por exemplo:

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

o objetivo é imprimir a linha, enquanto o primeiro campo começa com Linux1

exemplo de linhas:

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

observação - o espaço ou a TAB pode estar antes do primeiro arquivo

yael
fonte

Respostas:

15

Mão única:

echo "Linux1_ver2  12542 kernel-update"  |  awk '$1 ~ /^ *Linux1/'
Guru
fonte
$ 1 e ^ são redundantes. Sua proposta não cobre guias.
Hauke Laging
@HuakeLaging Por que você acha que $ 1 e ^ são redundantes? Tenho certeza de que ambos são necessários para que a primeira palavra seja comparada apenas e para que a correspondência seja ancorada no início (por exemplo, "mLinux" pode ser correspondido por / Linux1 /, mas não por / ^ Linux /).
Nick Bull
19

O awk ignora os espaços em branco iniciais ao atribuir campos. O comando padrão é print.

awk '$1 ~ /^Linux1/'

É o que você quer.

Explicação detalhada:

  • $ 1 diz ao awk para olhar a primeira "coluna".
  • ~ diz ao awk para fazer uma correspondência RegularExpression /..../ é uma expressão regular.
  • Dentro do RE está a string Linux e o caractere especial ^.
  • ^ faz com que o ER corresponda desde o início (ao contrário de corresponder a qualquer lugar da linha).

Vistos juntos: o Awk corresponderá a uma expressão regular com "Linux" no início da primeira coluna.

Johan
fonte
2

Isso deve funcionar para este caso específico.

awk '/^[[:blank:]]*Linux1/ {print}'
Bernhard
fonte
mas se o espaço é antes Linux1 o que não irá corresponder
yael
@yael Eu fiz uma edição para corrigir isso.
amigos estão dizendo sobre hauke laging
+1 Para quem quer saber o que esta sintaxe está fazendo: está dizendo "faça as coisas dentro do aparelho apenas se o regex corresponder a essa linha".
User541686