使用awk从文本文件中提取数据

时间:2011-08-09 14:27:16

标签: linux sed awk

  

可能重复:
  Extract data between two points in a text file

例如:

Reply: [200/OK] bytes=29086 time=583ms

我想提取“time =”和“ms”之间的值

预期结果:

“583”

4 个答案:

答案 0 :(得分:8)

我会使用sed,但是因为你要求awk:

echo "Reply: [200/OK] bytes=29086 time=583ms" | awk -F'time=|ms' '{print $2}'

-F定义字段分隔符的扩展正则表达式。因此我们定义“time =”或“ms”分隔字段,然后打印第二个字段。

使用sed,它将是:

echo "Reply: [200/OK] bytes=29086 time=583ms" | sed 's/.*time=\([0-9]*\)ms.*/\1/'

答案 1 :(得分:2)

echo "Reply: [200/OK] bytes=29086 time=583ms" | sed "s/.*time=\(.*\)ms/\1/"

答案 2 :(得分:1)

丑陋但有效:

$ echo "Reply: [200/OK] bytes=29086 time=583ms" | 
    awk '{print $4'} | sed -e 's/[a-z=]//g'
583

或没有sed

$ echo "Reply: [200/OK] bytes=29086 time=583ms" | 
    awk '{ split($4,a,"="); gsub(/ms/,"", a[2]); print a[2] }'
583

答案 3 :(得分:0)

试试这个

printf "Reply: [200/OK] bytes=29086 time=583ms\n" \
| awk '/^Reply:/{sub(/^.*time=/,"",$0) ;sub(/ms$/,"",$0); print $0}'

我希望这会有所帮助。

P.S。因为您似乎是新用户,如果您得到的答案可以帮助您,请记住将其标记为已接受,并且/或者给它一个+(或 - )作为有用的答案。