命令下: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}' 但我仍然需要提取这些信息,任何想法?拜托。
答案 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行