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.