gpt4 book ai didi

bash - 根据特定字符串过滤行,然后只打印一些更大的属性

转载 作者:行者123 更新时间:2023-12-05 09:02:46 24 4
gpt4 key购买 nike

我有一个包含数百万行日志的大文本文件。

我想过滤所有满足以下条件的行

  1. url 应该是 url=/v2/testB
  2. totalTime 值应大于 500
INFO|id=1|totaltime=5000|httpmethod=POST|url=/v1/testA
INFO|id=2|totaltime=200|httpmethod=POST|url=/v2/testB
INFO|id=3|totaltime=1000|httpmethod=POST|url=/v2/testB
INFO|id=4|totaltime=501|httpmethod=POST|url=/v2/testB

结果:-

id=3,totaltime=1000
id=4,totaltime=501

我试过用多个awk,然后放if block,不知道能不能很快搞定?谢谢!

while IFS= read -r line; do
value=`echo $line|grep "url=/v2/testB" | awk -F"totaltime=" '{ print $2}'| awk -F"|" '{ print $1}'`
if (( $value > 500 )); then
echo $line
fi
done < file.log

最佳答案

你可以使用这个 awk:

awk -F '|' -v OFS=, '$NF == "url=/v2/testB" {v=$3; sub(/^totaltime=/, "", v); if (v+0 > 500) print $2, $3}' file

id=3,totaltime=1000
id=4,totaltime=501

为了使其更具可读性:

awk -F '|' -v OFS=, '
$NF == "url=/v2/testB" {
v = $3
sub(/^totaltime=/, "", v)
if (v+0 > 500)
print $2, $3
}' file

如果你有 gnu-awk 那么它可以简化为:

awk -F '|' -v OFS=, '$NF == "url=/v2/testB" &&
gensub(/^totaltime=/, "", "1", $3)+0 > 500 {print $2, $3}' file

v+0 是 awk 中的简写,用于将字符串值转换为数字。

关于bash - 根据特定字符串过滤行,然后只打印一些更大的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70895765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com