2016-10-30 3 views
1

unter Befehl: anzeigen GPARTbashscript Extrakt Infos von benutzerdefinierter Reihe

i get the output 
=>  34 31457213 ada0 GPT (15G) 
     34  128  1 freebsd-boot (64k) 
     162 29360000  2 freebsd-ufs (14G) 
    29360162 1572864  3 freebsd-swap (768M) 
    30933026 524221  - free - (10GB) 

wie kann ich nur 14G Extrakt aus der 3. Zeile und 10GB von den letzten Zeile?

die 14/10GB Werte sind nie gleich, was meine Arbeit erschwert.

i verwalten einige Ergebnisse erhalten

Katze-Test | sed 's/\ |//' | awk '{print $ 6} {print $ 5}' aber ich muss immer noch nur diese Info extrahieren,

irgendwelche Ideen? bitte danke.

+1

: gpart show | awk 'NR == 3 || NR == 5 {print $ NF} '| sed "s/(//; s /) //" – VenkatC

+0

Wenn Sie speziell die 'freebsd-ufs'-Partition haben wollen, sollten Sie das filtern, anstatt zu hoffen, dass es immer sein wird Linie 3 ... –

Antwort

1

Mit awk:

awk -F '[()]' 'NR==3 {print $(NF-1)} END{print $(NF-1)}' file.txt 
  • -F '[()]' setzt das Feldtrennzeichen als ( oder )

  • NR==3 {print $(NF-1)} druckt das gewünschte Feld für die dritte Zeile

  • END{print $(NF-1)} druckt das gewünschte FIE ld für die letzte Zeile

Beispiel:

% cat file.txt 
    34 31457213 ada0 GPT (15G) 
     34  128  1 freebsd-boot (64k) 
     162 29360000  2 freebsd-ufs (14G) 
    29360162 1572864  3 freebsd-swap (768M) 
    30933026 524221  - free - (10GB) 

% awk -F '[()]' 'NR==3 {print $(NF-1)} END{print $(NF-1)}' file.txt 
14G 
10GB 
0
$ cat file 
     34 31457213 ada0 GPT (15G) 
     34  128  1 freebsd-boot (64k) 
     162 29360000  2 freebsd-ufs (14G) 
    29360162 1572864  3 freebsd-swap (768M) 
    30933026 524221  - free - (10GB) 
$ egrep -o '\([0-9]+\w+\)$' file | sed -n '3p;5p' 
(14G) 
(10GB) 

Streichhölzer regex '\([0-9]+\w+\)$' dh 1 oder mehr Ziffern, gefolgt von 1 oder mehr Wort Zeichen sowohl in runden Klammern enthalten ist, und unter Verwendung von sed 3. und 5. Zeile drucken

1

Sie können unter Lösung versuchen -

[email protected]:~$ cat kk.txt 
    34 31457213 ada0 GPT (15G) 
     34  128  1 freebsd-boot (64k) 
     162 29360000  2 freebsd-ufs (14G) 
    29360162 1572864  3 freebsd-swap (768M) 
    30933026 524221  - free - (10GB) 
    [email protected]:~$ awk -F'\(|\)' 'NR==3 || NR==5 {print $(NF -1)}' kk.txt 
14G 
10GB 

Erklärung -

Verwendung Escape-Zeichen \() und | für mehrere Feld seperator zu verwenden und NR mehr Zeilen und NF-1 zu drucken letzte Spalte zu wählen, wenn () Feld seperator ist.