gpt4 book ai didi

linux - Grep 一行然后打印 awk 直到某个子串

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:51:13 26 4
gpt4 key购买 nike

我的代码是

var=$(cat $FILE | grep "$alineimlookingfor" | awk '{print $1, $2, $4, $7, $9... all the way to $20}'
echo "$var"

但是,我希望在达到 (0) 或 (1) 这样的值时停止 $9-$20。这将使我的输出格式看起来更好,因为 (0) 或 (1) 之后的任何内容都是垃圾。

有没有人知道实现它的方法?

输入:

2013-02-21 00:12:03,374 [Thread] IN ProcedureTask - Finished Sales Summary 22 This (0) - 21-JUNE-10    

输出:

2013-02-21 00:12:03,374 IN ProcedureTask - Finished Sales Summary 22 This (0)

编辑:感谢所有对此主题发表评论的人,尤其是 ED 和 GLENN

最佳答案

更新:

awk -v pattern="$alineimlookingfor" '
$0 ~ pattern {
rec = $1 OFS $2 OFS $4 OFS $7
for (i=9; i<=NF; i++) {
rec = rec OFS $i
if ($i ~ /\([01]\)/) {
break
}
}
print rec
}
' "$FILE"

应该完全符合你的要求

注意事项:

  • NF 是一个 awk 变量,包含当前记录中的N字段
  • 当我们看到包含模式的记录时:
    • 将前 4 个字段存储在名为 rec 的变量中,由 Output Field S 分隔分离器。
    • 遍历从 9 到最后的字段,附加到 rec 变量
      • 当我们看到匹配正则表达式的一个(括号中的零或一)时,我们就会跳出 for 循环
    • 并打印累积的 rec 字符串。

首先,请注意 awk 可以做 catgrep 做的事情,因此我们可以立即简化管道

awk -v pattern="$alineimlookingfor" '$0 ~ pattern {print $1, $2, $4, $7, $9... all the way to $20}' "$FILE"

接下来,听起来你想要

awk -v pattern="$alineimlookingfor" '
$0 ~ pattern {
for (i=9; i<NF; i++) {
if ($i == "(0)" || $i == "(1)") {
NF = i
break
}
}
print
}
' "$FILE"

这会更改“此记录中的字段数”变量,以便忽略后续字段。

测试

alineimlookingfor=ProcedureTask
awk -v pattern="$alineimlookingfor" '
$0 ~ pattern {
for (i=9; i<NF; i++) {
if ($i == "(0)" || $i == "(1)") {
NF = i
break
}
}
print
}
' <<'END'
foo
2013-02-21 00:12:03,374 [Thread] IN ProcedureTask - Finished Sales Summary 22 This (0) - 21-JUNE-10
bar
2013-02-21 00:12:03,374 [Thread] IN ProcedureTask - Finished Sales Summary 22 This (1) - 21-JUNE-10
baz
2013-02-21 00:12:03,374 [Thread] IN ProcedureTask - Finished Sales Summary 22 This (2) - 21-JUNE-10
END

输出

2013-02-21 00:12:03,374 [Thread] IN ProcedureTask - Finished Sales Summary 22 This (0)
2013-02-21 00:12:03,374 [Thread] IN ProcedureTask - Finished Sales Summary 22 This (1)
2013-02-21 00:12:03,374 [Thread] IN ProcedureTask - Finished Sales Summary 22 This (2) - 21-JUNE-10

关于linux - Grep 一行然后打印 awk 直到某个子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31080470/

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