2016-10-30 77 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打印最后一列时()是场分隔符。