bashscript从自定义行中提取信息

时间:2016-10-30 04:00:00

标签: linux bash shell awk sed

命令下:gpart show

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行提取14G而从最后一行提取10GB?

14 / 10GB的值永远不会相同,这使我的工作更难。

我设法使用

获得一些结果 猫测试| sed's / \ | / /'| awk'{print $ 6} {print $ 5}' 但我仍然需要提取这些信息,

任何想法?拜托。

3 个答案:

答案 0 :(得分: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)}打印最后一行所需的字段

示例:

% 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

答案 1 :(得分:1)

您可以尝试以下解决方案 -

vipin@kali:~$ 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)
   vipin@kali:~$ awk -F'\(|\)' 'NR==3 || NR==5 {print $(NF -1)}' kk.txt
14G
10GB

解释 -

使用转义字符\()|用于多个字段分隔符,NR选择多行,NF-1打印最后一列{ {1}}是字段分隔符。

答案 2 :(得分: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+\)$',即一个或多个数字,后跟一个或多个单词字符,两者都包含在圆括号中,并使用sed打印第3行和第5行