parametr podziału awk według znaku

plik to:

BASH.NIR SH.ABI 

Chcę skrypt awk do pokazania:

User is NIR, SHELL is BASH User is ABI, SHELL is SH 

Nie wiem, jak podzielić parametr według znaków. Pomysł jest następujący:

cat file.txt | awk "{print "User is " afterDot($1) ", SHELL is " beforeDot($1)}" 

Odpowiedź

Funkcji ciągów można używać w awk.

$ (echo BASH.NIR; echo SH.ABI FOOBAR) | awk "{p=index($1,".");print "User is", substr($1,p+1) ", SHELL IS", substr($1,0,p-1)}" User is NIR, SHELL IS BASH User is ABI, SHELL IS SH 

Funkcja index zwraca pozycję szukanego znaku (w tym przypadku kropki). I strstr zwróci podciąg. Używamy p+1 i p-1, aby nie uwzględniać kropki.

Więcej informacji można znaleźć w sekcji „Funkcje ciągów” na stronie podręcznika awk.

Odpowiedź

Możesz po prostu użyć . jako separatora pól:

awk -F. "{ print "User is " $2 ", SHELL is " $1 }" file.txt 

Komentarze

  • plik tekstowy może mieć rozszerzenie ma też białe spacje
  • @nir Proszę wkleić próbkę swoich dokładnych danych wejściowych do pytania, mogę ' zgadnąć, jak to wygląda na przykład, chyba że odpowiednio je przedstawisz.
  • @nir – zawsze najlepiej jest zawierać prawdziwe przykładowe dane. Zmodyfikowane dane zwykle marnują po prostu czas odpowiedzi ', ponieważ generalnie prowadzi to do niewłaściwych rozwiązań.
  • masz rację, pojawi się następnym razem.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *