gpt4 book ai didi

linux - ubuntu grep - 如何连接子字符串的各个部分

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:36:19 25 4
gpt4 key购买 nike

我正在执行以下 grep 语句

grep 'duration: [[:digit:]]\{4,\}' file_name.log | grep 'execute' | grep -o 'duration: [[:digit:]]\{4,\}.*' | grep -o '[[:digit:]]\{4,\}.*' | sort -g -r

它给了我这样的结果

26398.170 ms execute: SELECT ... bla-bla ...

987687.234 ms execute: SELECT ... bla-bla ...

我正在想办法做到这一点

26398 execute: SELECT ... bla-bla ...

987687 execute: SELECT ... bla-bla ...

类似于 grep -o '[[:digit:]]\{4,\}' + 'execute.*'

最佳答案

grep 无法对其输入重新排序,它只能提取匹配项或包含匹配项的行。

我建议为此使用 Awk,这也消除了长管道:

awk '/execute/ && match($0, /duration: [0-9]{4,}\.[0-9]* ms /) { 
split (substr($0, RSTART, RLENGTH), d);
print int(d[2]), substr($0, RSTART+RLENGTH) }' file_name.log |
sort -g -r

match 在输入行中找到与正则表达式匹配的子字符串的开始和结束,并填充变量 RSTARTRLENGTH这样你就可以提取与 substr() 匹配的字符串。我们在空格处拆分该字符串并提取第二个标记,即匹配项的数字部分,并将其截断为其整数部分。 substr($0, RSTART+RLENGTH) 从匹配项末尾到行末提取字符串的其余部分。

如果你不擅长 Awk 但擅长正则表达式,你可以使用更简单的 sed 脚本:

sed -n '/execute/!d;/.*duration: \([0-9]\{4,\}\)\.[0-9]* ms /!d;s//\1/p' file_name.log |
sort -g -r

关于linux - ubuntu grep - 如何连接子字符串的各个部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48580628/

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