awk + ligne d'impression uniquement si le premier champ commence par une chaîne comme Linux1

16

comment imprimer la ligne au cas où le premier champ commencerait avec Linux1

par exemple:

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

l'objectif est d'imprimer la ligne, tandis que le premier champ commence par Linux1

exemple de lignes:

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

remarque - l'espace ou TAB pourrait être avant le premier dépôt

Yael
la source

Réponses:

15

Une manière:

echo "Linux1_ver2  12542 kernel-update"  |  awk '$1 ~ /^ *Linux1/'
Gourou
la source
$ 1 et ^ sont redondants. Votre proposition ne couvre pas les onglets.
Hauke ​​Laging du
@HuakeLaging Pourquoi pensez-vous que les $ 1 et ^ sont redondants? Je suis tout à fait sûr que les deux sont nécessaires pour que le premier mot soit comparé uniquement, et pour que la correspondance soit ancrée au début (par exemple, "mLinux" pourrait être mis en correspondance par / Linux1 /, mais pas par / ^ Linux /).
Nick Bull
19

awk ignore les blancs en tête lors de l'attribution des champs. La commande par défaut est print.

awk '$1 ~ /^Linux1/'

C'est ce que tu veux.

Explication détaillée:

  • $ 1 dit à awk de regarder la première "colonne".
  • ~ indique à awk de faire une correspondance RegularExpression /..../ est une expression régulière.
  • Dans le RE se trouve la chaîne Linux et le caractère spécial ^.
  • ^ fait correspondre le RE dès le début (par opposition à la correspondance n'importe où sur la ligne).

Vu ensemble: Awk correspondra à une expression régulière avec "Linux" au début de la première colonne.

Johan
la source
2

Cela devrait fonctionner pour ce cas spécifique.

awk '/^[[:blank:]]*Linux1/ {print}'
Bernhard
la source
mais si l'espace est avant Linux1, il ne correspondra pas
yael
@yael J'ai fait une modification pour corriger cela.
Hauke ​​Laging
+1 À quiconque se demande ce que fait cette syntaxe: il dit "ne fais les choses entre accolades que si l'expression régulière correspond à cette ligne".
user541686