gpt4 book ai didi

regex - 用于获取文件中特定行的 awk 代码

转载 作者:行者123 更新时间:2023-12-01 09:04:31 27 4
gpt4 key购买 nike

我有一个包含如下数据的 Query.txt 文件:

  # Query: Name_ID
# 2 hits found****
# Query: Name_ID
# 20 hits found
# Query: Name_ID
# 0 hits found

当我使用 awk 或 grep 获取模式时,我得到如下输出:

grep "0 hits found" Query.txt | head
# 20 hits found
# 0 hits found
# 140 hits found
# 70 hits found

两个问题:我如何专门获得“找到 0 个命中”而不是 20 或 140 或 70?第二,如何使用 AWK 创建另一个格式如下的 Query2.txt 文件?

# Query: Name_ID  # 2 hits found
# Query: Name_ID # 20 hits found
# Query: Name_ID # 0 hits found

最佳答案

要只获得 0 hits found 的行,尝试完全匹配该字符串但在零之前没有数字:

awk '$0 ~ /[^[:digit:]]0 hits found/' infile

假设一个测试输入文件(infile)如下:

# Query: Name_ID1
# 2 hits found
# Query: Name_ID2
# 20 hits found
# Query: Name_ID3
# 0 hits found
# Query: Name_ID4
# 140 hits found
# Query: Name_ID5
# 0 hits found
# Query: Name_ID6
# 60 hits found

它产生:

# 0 hits found
# 0 hits found

第二个问题,使用getline读取奇数行并同时打印,如:

awk '{ getline hits_line; printf "%s %s\n", $0, hits_line }' infile

使用与之前相同的测试文件,它产生:

# Query: Name_ID1 # 2 hits found
# Query: Name_ID2 # 20 hits found
# Query: Name_ID3 # 0 hits found
# Query: Name_ID4 # 140 hits found
# Query: Name_ID5 # 0 hits found
# Query: Name_ID6 # 60 hits found

另外,我喜欢使用 尝试此类任务也是,所以这里有一个解决方案:

script.vim 的内容:

set backup
for n in range( 1, line('$') / 2 )
execute "normal Jj"
endfor
saveas! Query2.txt
q!

像这样运行它:

vim -S script.vim infile

这将生成一个包含以下内容的 Query2.txt 文件:

# Query: Name_ID1 # 2 hits found
# Query: Name_ID2 # 20 hits found
# Query: Name_ID3 # 0 hits found
# Query: Name_ID4 # 140 hits found
# Query: Name_ID5 # 0 hits found
# Query: Name_ID6 # 60 hits found

关于regex - 用于获取文件中特定行的 awk 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16990612/

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