用于解析列中数据的Shell脚本

时间:2012-11-29 02:40:57

标签: linux bash shell

我需要一些家庭作业问题的帮助。我在需要解析的文件中有以下数据:

              Output-------------------------- Input---------------- Random----
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --Seeks---
Machine    MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec  %CPU /sec  %CPU
         50.0 36112 34.1 138026  1.9 179048  7.0 51361 51.1 312242  4.3 15211.4 10.3

我需要的是一种从输出和输入列的Block列中提取数据的方法。例如:

Output Block:
K/sec: 138026
%CPU:  1.9

Input Block:
K/sec: 312242
%CPU:  4.3

我只能使用sed,awk,cut和grep。

2 个答案:

答案 0 :(得分:0)

parse_data.txt: - 数据存在的文件。

更多parse_data.txt | grep -v“ - ”| sed's / \ / \ / g'| awk'{print $ 4“”$ 5“”$ 10“”$ 11}“

关于输出和输入块的CPU和k / sec数据 已被检索,如下所示,

输出得到:

 K/sec  %CPU K/sec  %CPU
 138026 1.9  312242 4.3

希望这能解决你的问题!!!!!

答案 1 :(得分:0)

因为奇数标题只有数据行有13个字段,所以你可以使用awk单行:

awk '{if (NF==13) printf "Output Block:\nK/sec: %s\n%CPU:  %s\n\nInput Block:\nK/sec: %s\n%CPU:  %s\n",$4, $5, $10, $11 }' inputfilename

如果你想解析shell中的多行

while read LINE || [ "$LINE" ]; do ... done < inputfile

分割一个你可以再次使用读取的字符串,如

read dummyvar dummyvar2 dummy3 outputkb ... <<< $mystring