gpt4 book ai didi

linux - awk 在文件中查找两个字符串之间的第二条记录/awk 搜索

转载 作者:太空狗 更新时间:2023-10-29 12:10:44 25 4
gpt4 key购买 nike

我正在尝试使用 awk 在与 awk 相同的脚本中查找内容。

我的文件看起来像这样:

    function fanv {
bla bla
}

echo "something"
awk '/start/,/end/ {c=2}c&&c--' test.sh >> outputfile

exit 0

#start
string that needs to be print
#end

问题是 awk 将所有文件作为输入(不能依赖行号),因此结果也是 awk 表达式的文本。此外,操作 {c=2}c&&c-- 不起作用,我可能遗漏了一些东西。

输出文件的结果是:

awk '/start/,/end/ {c=2}c&&c--'  test.sh >> outputfile
#start
string that need to be print
#end

如何从 awk 中选择第二条记录,以便输出文件只包含

string that need to be print

最佳答案

你可以使用这个awk:

awk 'p && /^#end/{ p=0; print lines }
p{ lines=(lines==""?$0:lines ORS $0) }
/^#start/{ p=1; lines="" }' file

string that need to be print

有 3 个条件和操作 block :

  • p &&/^#end/{ p=0;打印行 - 当 p==1 并且我们得到以 #end 开头的行。我们重置标志 p 并打印我们的缓冲区。
  • p{ lines=(lines==""?$0:lines ORS $0) } - 当 p==1 时,我们继续将所有行附加到缓冲区中
  • /^#start/{ p=1; lines=""} - 当我们得到以 #start 开头的行时,我们设置标志 p 并重置 lines 缓冲区。

关于linux - awk 在文件中查找两个字符串之间的第二条记录/awk 搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45280230/

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