awk代码获取文件中的特定行

use*_*553 3 regex awk

我有一个文件Query.txt与这样的数据:

  # Query: Name_ID
  # 2 hits found****
    # Query: Name_ID
    # 20 hits found
    # Query: Name_ID
    # 0 hits found
Run Code Online (Sandbox Code Playgroud)

当我把它弄糟或grep它为一个模式我得到如下输出:

grep "0 hits found" Query.txt | head
 # 20 hits found
 # 0 hits found
 # 140 hits found
 # 70 hits found
Run Code Online (Sandbox Code Playgroud)

两个问题:我如何专门得到"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
Run Code Online (Sandbox Code Playgroud)

Bir*_*rei 5

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

awk '$0 ~ /[^[:digit:]]0 hits found/' infile
Run Code Online (Sandbox Code Playgroud)

假设测试输入文件(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
Run Code Online (Sandbox Code Playgroud)

它产生:

# 0 hits found
# 0 hits found
Run Code Online (Sandbox Code Playgroud)

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

awk '{ getline hits_line; printf "%s %s\n", $0, hits_line }' infile
Run Code Online (Sandbox Code Playgroud)

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

# 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
Run Code Online (Sandbox Code Playgroud)

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

内容script.vim:

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

运行它像:

vim -S script.vim infile
Run Code Online (Sandbox Code Playgroud)

这将生成一个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
Run Code Online (Sandbox Code Playgroud)