W tej chwili próbuję nauczyć się awk, więc próbuję tego na disk utility
polecenie.
Oto dane wyjściowe po uruchomieniu Disk Utility list disk0
/ dev / disk0 (wewnętrzny, fizyczny): #: NAZWA TYPU IDENTYFIKATOR ROZMIARU 0: GUID_partition_scheme * 251,0 GB dysku0 1: EFI EFI 209,7 MB dysku 0s1 2: Apple_HFS Macintosh HD 145,4 GB na dysku 0s2 3: Apple_Boot Recovery HD 650.0 MB disk0s3 4: System plików Linux 48,0 GB disk0s4 5: Microsoft Basic Data WINDOWS 38,0 GB na dysku 0s5 6: Linux Swap 18,8 GB dysku 0s6
Teraz, jeśli uruchomię diskutil list disk0 | awk 'NR > 2 {print}'
, otrzymam to jako wynik.
0: GUID_partition_scheme * 251,0 GB dysku0 1: EFI EFI 209,7 MB dysku 0s1 2: Apple_HFS Macintosh HD 145,4 GB na dysku 0s2 3: Apple_Boot Recovery HD 650.0 MB disk0s3 4: System plików Linux 48,0 GB disk0s4 5: Microsoft Basic Data WINDOWS 38,0 GB na dysku 0s5 6: Linux Swap 18,8 GB dysku 0s6
Jak widać, wynik jest zgodny z oczekiwaniami. Problem polega na tym, że kiedy próbuję wydrukować 2 USD, 3 USD i 4 USD, wydruk czasami drukuje „HD”, kiedy powinien wydrukować rozmiar i inne podobne problemy.
diskutil list disk0 | awk 'NR > 2 {print $1}'
0: 1: 2: 3: 4: 5: 6:
Spodziewany wynik
diskutil list disk0 | awk 'NR > 2 {print $2}'
GUID_partition_scheme EFI Apple_HFS Apple_Boot Linux Microsoft Linux
Spodziewany wynik
GUID_partition_scheme EFI Apple_HFS Apple_Boot System plików Linux Podstawowe dane Microsoft Wymiana systemu Linux
Jak widać, polecenie wydaje wyniki zgodnie z oczekiwaniami, aż do systemu plików Linux. Wynika to z faktu, że w słowie są spacje?
Wpływa to teraz na wszystko, co następuje po nim, na przykład
diskutil list disk0 | awk 'NR > 2 {print $3}'
wyświetla
* 251,0 EFI Prochowiec Poprawa System plików Podstawowy Zamiana
kiedy powinno to pokazać
EFI Macintosh HD Odzyskiwanie HD Windows
Jak mam sformatować AWK zgodnie z oczekiwaniami?
źródło
substr()
pokazanych znaków.diskutil
dane wyjściowe są formatowane za pomocą wielu spacji, aby wyświetlać je w czystych kolumnach. Wyodrębnij wymagane pola za pomocąsubstr
funkcji awk .Na przykład, aby wyodrębnić typ i nazwę
diskutil
. Funkcje substr wyodrębniają pola z danych wyjściowych diskutil. Na przykład pole nazwy zaczyna się od pozycji 6 i ma długość do 27 znaków. Funkcje gsub po prostu usuwają początkowe i końcowe białe pola z pól.źródło