从变量中搜索awk中的模式

时间:2017-07-18 14:27:02

标签: linux bash shell awk

我有数据输入数据:

#!/bin/bash

search_pattern=AA

awk '-v search='$search_pattern' /search/ {count ++}END {print count, "/", NR} ' input

我想做这样的事情:

1 / 5

欲望输出是:

$search_pattern
  1. 问题是:当我使用变量/ 5时 - 仅显示awk输出:0 / 5

  2. 如何“告诉”awk只搜索AA(不是AAA)=强制PATTERN只匹配整个单词

  3. 感谢您的帮助。

    编辑:

    可以添加条件,如果与任何字符串不匹配,请打印catboost

2 个答案:

答案 0 :(得分:3)

搜索将采用其他字符串,其中包含此字符串,因此请尝试按照。

(6, 1, '0x19')
(7, 2, '0x02') 
(8, 3, '0x2F')

或者显示变量名称等。

var="AA"    
awk -v VAR="$var" '$0 == VAR{count++;} END{print count " / " NR}'  Input_file

编辑: 如果没有找到匹配到Input_file的匹配项,OP增加了对输出添加0的额外要求,以下内容可能有所帮助。

search_pattern=AA
awk -v search="$search_pattern" '$0 == search {count++}END {print count, "/", NR}' Input_file

答案 1 :(得分:1)

Ravinder的解决方案是正确的。只是将其添加为使用模式匹配的另一种方式。

search_pattern=^AA$
awk -v search="$search_pattern" 'BEGIN{count=0} $0 ~ search {count++} END{print count, "/", NR}' input

^ =行的开头。

$ =行尾。

因此,AAA不会被计算在内。