我有一个看起来像这样的文件:
$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
,time
和Gflop/s
,但这只是以calc 201
开头的最后两行。
到目前为止,我已成功过滤了我想要的内容,但元素time
和Gflop/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
有没有合理的方法呢?
答案 0 :(得分: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
答案 1 :(得分:2)
试试这个:
awk '/Number of reps:/ { printf "%s ", $NF } /calc *201:/ { print $4,$6 }' myfile.dat
答案 2 :(得分: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:”的行的第四个和第六个单词< / p>