awk + print line solo se il primo campo inizia con stringa come Linux1


16

come stampare la linea nel caso in cui il primo campo inizi con Linux1

per esempio:

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

l'obiettivo è stampare la linea, mentre il primo campo inizia con Linux1

esempio di linee:

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

osservazione: spazio o TAB potrebbero essere prima del primo archiviato

Risposte:


15

Senso unico:

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

$ 1 e ^ sono ridondanti. La tua proposta non copre le schede.
Hauke ​​Laging,

@HuakeLaging Perché pensi che $ 1 e ^ siano ridondanti? Sono abbastanza sicuro che entrambi siano richiesti in modo che la prima parola sia confrontata solo con, e che la corrispondenza sia ancorata all'inizio (ad esempio, "mLinux" potrebbe essere abbinato da / Linux1 /, ma non da / ^ Linux /).
Nick Bull,

19

awk ignora gli spazi vuoti iniziali durante l'assegnazione dei campi. Il comando predefinito è stampa.

awk '$1 ~ /^Linux1/'

È quello che vuoi.

Spiegazione dettagliata:

  • $ 1 dice a awk di guardare la prima "colonna".
  • ~ dice a awk di fare una corrispondenza RegularExpression /..../ è un'espressione regolare.
  • All'interno di RE c'è la stringa Linux e il carattere speciale ^.
  • ^ fa in modo che RE corrisponda dall'inizio (al contrario della corrispondenza in qualsiasi punto della riga).

Visto insieme: Awk abbinerà un'espressione regolare a "Linux" all'inizio della prima colonna.


2

Questo dovrebbe funzionare per questo caso specifico.

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

ma se lo spazio è prima di Linux1 non corrisponderà
yael

@yael Ho fatto una modifica per correggerlo.
Hauke ​​Laging,

+1 A chiunque si chieda cosa stia facendo questa sintassi: sta dicendo "fai le cose dentro le parentesi graffe solo se la regex corrisponde a quella linea".
user541686
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.