awk + linia wydruku tylko wtedy, gdy pierwsze pole zaczyna się od łańcucha jako Linux1


16

jak wydrukować linię na wypadek, gdyby pierwsze pole zaczynało się od Linuksa1

na przykład:

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

celem jest wydrukowanie linii, podczas gdy pierwsze pole zaczyna się od Linuksa1

przykład linii:

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

Uwaga - spacja lub TAB mogą być przed pierwszym zgłoszeniem

Odpowiedzi:


15

Jednokierunkowa:

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

1 $ i ^ są zbędne. Twoja propozycja nie obejmuje kart.
Hauke ​​Laging 17.04.13

@HuakeLaging Dlaczego według ciebie $ 1 i ^ są zbędne? Jestem pewien, że oba są wymagane, aby pierwsze słowo było dopasowane tylko do, i aby dopasowanie zostało zakotwiczone na początku (np. „MLinux” może być dopasowany przez / Linux1 /, ale nie przez / ^ Linux /).
Nick Bull

19

awk ignoruje wiodące spacje podczas przypisywania pól. Domyślne polecenie to print.

awk '$1 ~ /^Linux1/'

To jest to czego chcesz.

Szczegółowe wyjaśnienie:

  • 1 USD każe awk spojrzeć na pierwszą „kolumnę”.
  • ~ mówi awk, aby wykonał dopasowanie wyrażenia regularnego /..../ jest wyrażeniem regularnym.
  • W RE znajduje się ciąg Linux i znak specjalny ^.
  • ^ powoduje, że RE dopasowuje się od początku (w przeciwieństwie do dopasowywania w dowolnym miejscu linii).

Widziane razem: Awk dopasuje wyrażenie regularne do „Linux” na początku pierwszej kolumny.


2

To powinno zadziałać w tym konkretnym przypadku.

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

ale jeśli przestrzeń jest przed Linuksem1, to nie będzie pasować
yael

@yael Dokonałem edycji, aby to poprawić.
Hauke ​​Laging 17.04.13

+1 Dla każdego, kto zastanawia się, co robi ta składnia: mówi „rób rzeczy w nawiasach klamrowych tylko, jeśli wyrażenie regularne pasuje do tej linii”.
user541686
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.