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

发布于 2024-11-28 16:34:54 字数 353 浏览 2 评论 0原文

可能的重复:
提取文本文件中两点之间的数据 < /p>

示例:

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

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

预期结果:

“583”

Possible Duplicate:
Extract data between two points in a text file

For example:

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

I would want to extract the value between "time=" and "ms"

Expected Result:

"583"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

情痴 2024-12-05 16:34:54

我会使用 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/'

I would use sed for that, but since you ask for awk:

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

The -F defines extended regexp for field separator. So we define that "time=" or "ms" separates the fields, and then print second field.

using sed, it would be:

echo "Reply: [200/OK] bytes=29086 time=583ms" | sed 's/.*time=\([0-9]*\)ms.*/\1/'
z祗昰~ 2024-12-05 16:34:54
echo "Reply: [200/OK] bytes=29086 time=583ms" | sed "s/.*time=\(.*\)ms/\1/"
echo "Reply: [200/OK] bytes=29086 time=583ms" | sed "s/.*time=\(.*\)ms/\1/"
森林散布 2024-12-05 16:34:54

丑陋但有效:

$ 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

Ugly but works:

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

Or without sed:

$ echo "Reply: [200/OK] bytes=29086 time=583ms" | 
    awk '{ split($4,a,"="); gsub(/ms/,"", a[2]); print a[2] }'
583
单身情人 2024-12-05 16:34:54

试试这个

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

我希望这有帮助。

PS,由于您似乎是新用户,如果您得到的答案对您有帮助,请记住将其标记为已接受,和/或给它 +(或 -)作为有用的答案。

Try this

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

I hope this helps.

P.S. as you appear to be a new user, if you get an answer that helps you please remember to mark it as accepted, and/or give it a + (or -) as a useful answer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文