awk + linha de impressão somente se o primeiro campo começar com string como Linux1

11

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

por exemplo:

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

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

exemplo de linhas:

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

observação - espaço ou TAB pode ser antes do primeiro arquivamento

    
por yael 17.04.2013 / 12:20

3 respostas

11

Um caminho:

echo "Linux1_ver2  12542 kernel-update"  |  awk '$1 ~ /^ *Linux1/'
    
por 17.04.2013 / 12:30
15

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

awk '$1 ~ /^Linux1/'

É o que você quer.

Explicação detalhada:

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

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

    
por 17.04.2013 / 14:00
1

Isso deve funcionar para este caso específico.

awk '/^[[:blank:]]*Linux1/ {print}'
    
por 17.04.2013 / 12:25