2

我有一个看起来像这样的文件:

$cat myfile.dat

Number of reps:     nrep=  19230
flop count:         nops=  4725964800.

Clock resolution is  4.7619047619047619E-4 , usecs
time =  7.18247611075639725E-6
calc      0: time=    2.902 Gflop/s=    1.629 error=         0.00000000
calc    201: time=    1.186 Gflop/s=    3.985 error=         0.00000000
Number of reps:     nrep=  13456
flop count:         nops=  4234564800.

Clock resolution is  3.7619047619047619E-4 , usecs
time =  7.18247611075639725E-6
calc      0: time=    1.232 Gflop/s=    2.456  error=         0.00000000
calc    201: time=    3.186 Gflop/s=    1.345  error=         0.00000000

我有兴趣过滤我需要的内容: ,nrep但这只是以 . 开头的行的最后两个。timeGflop/scalc 201

到目前为止,我已经设法过滤了我想要的内容,除了元素timeGflop/s. 这就是我所做的:

awk -F'= ?' '/nrep=/||/time=/||/Gflop/{print $2}' myfile.dat

19230
2.902 Gflop/s
1.186 Gflop/s
13456
1.232 Gflop/s
3.186 Gflop/s

这显然是错误的。我需要的是,理想情况下在列中是:

19230 1.186 3.985
13456 3.186 1.345

有没有一种合理的方式来做到这一点?

4

3 回答 3

4

GNU awk您一起做:

$ awk 'NR>1{print $2,$27,$29}' RS='Number of reps:' file
19230 1.186 3.985
13456 3.186 1.345
于 2013-08-10T16:39:41.540 回答
2

试试这个:

awk '/Number of reps:/ { printf "%s ", $NF } /calc *201:/ { print $4,$6 }' myfile.dat
于 2013-08-10T16:38:24.427 回答
1

这个脚本会做你想做的事:

$ awk '/nrep=/{printf "%s ",$5}$1=="calc"&&$2=="201:"{print $4, $6}' myfile.dat 
19230 1.186 3.985
13456 3.186 1.345

它打印包含“nrep=”的行的第五个单词,(后面没有换行符),然后打印包含第一个单词“calc”和第二个“201”的行的第四个和第六个单词:

于 2013-08-10T16:36:14.890 回答