0

宿題の問題で助けが必要です。解析する必要があるファイルに次のデータがあります。

              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

必要なのは、出力列と入力列の両方のブロック列からデータを抽出する方法です。例えば:

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

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

sed、awk、cut、および grep の使用に制限されています。

4

2 に答える 2

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

これがあなたの問題を解決することを願っています!!!!!

于 2012-11-29T05:48:51.963 に答える
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

シェルで複数の行を解析したい場合

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

文字列を分割するには、 read again のように使用できます

read dummyvar dummyvar2 dummy3 outputkb ... <<< $mystring
于 2012-11-29T06:39:21.017 に答える