我的文件中包含与此处显示的部分类似的信息:
***Message size: 100000 *** best / avg / worst (MB/sec)
task pair: 0 - 1: 7423.55 / 6960.54 / 46.69
OVERALL AVERAGES: 7423.55 / 6960.54 / 46.69
***Message size: 200000 *** best / avg / worst (MB/sec)
task pair: 0 - 1: 7423.55 / 6960.54 / 46.69
OVERALL AVERAGES: 7423.55 / 6960.54 / 46.69
我希望使用与awk
相关的Message size
提取确定的信息,例如,如果我想从我将获得的avg
行中提取OVERALL AVERAGES
信息:
100000 6960.54
200000 6960.54
我可以轻松获取该文件的所有Message sizes
或所有avg
awk '/size:/ { print $3}' filename
awk '/size:/ {for(i=2; i<=2; i++) {getline; print $8}}' filename
但我希望找到一种以类似的列方式一起获取所有信息的方法。
答案 0 :(得分:1)
只需将邮件大小放入变量ms
:
awk '/***Message size:/{ms=$3} ms && /OVERALL AVERAGES:/{print ms,$5; ms=""}' file
答案 1 :(得分:1)
在sed的帮助下:
sed -n '/ size:/{N;s/.* size: *\([0-9]*\)[^\n]*\n/\1/p}' input_file | \
awk '{print $1, $9}'
答案 2 :(得分:1)
你可以使用它;
awk '/size:/ { printf $3};/OVERALL/ { print "\t" $5}'
实施例
user@host $ awk '/size:/ { printf $3};/OVERALL/ { print "\t" $5}' test
100000 6960.54
200000 6960.54
答案 3 :(得分:1)
如果Perl是一个选项:
perl -ane 'if (/size:/){print $F[2]} elsif(/OVERALL/){print "\t$F[4]\n"}' text
输出:
100000 6960.54
200000 6960.54
使用以下命令行选项:
-n
循环输入文件的每一行-a
autosplit模式 - 将输入行拆分为@F
数组-e
执行perl代码 @F
是每行中的单词数组,从$F[0]
开始编制索引
$F[2]
是@F
中的第三个元素
$F[4]
是@F