2016-10-30 76 views
1

下命令:gpart顯示bashscript提取信息

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) 

我怎樣才能從最後一行第3行和10GB只提取14G?

14/10GB的值永遠不會相同,這使得我的工作難以做到。

我管理使用

貓測試得到一些結果| sed's/\ |//'| awk'{print $ 6} {print $ 5}' 但我仍然需要提取該信息,

有什麼想法?謝謝。

+1

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

+0

如果你特別想要'freebsd-ufs'分區,你應該過濾它,而不是希望它永遠是第3行... –

回答

1

隨着awk

awk -F '[()]' 'NR==3 {print $(NF-1)} END{print $(NF-1)}' file.txt 
  • -F '[()]'設置字段分隔符作爲()

  • NR==3 {print $(NF-1)}打印用於第三線

  • END{print $(NF-1)}打印所需FIE所需的字段LD最後一行

實施例:

% 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) 

匹配正則表達式'\([0-9]+\w+\)$'即1個或多個數字,隨後1個或多個字字符,都包含在圓括號和使用sed打印第3行和第5行

1

您可以嘗試以下解決方案 -

[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 

解釋 -

使用轉義字符\使用()|多場分隔符和NR選擇多行和NF-1打印最後一列時()是場分隔符。