2017-07-18 56 views
1

我有数据输入数据:搜索模式在awk中从变量

AAA 
AAA 
AA 
BBB 
BB 

我愿做这样的事情:

#!/bin/bash 

search_pattern=AA 

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

欲望输出为:

1/5 
  1. 问题是:当我使用变量$search_pattern - 只有AWK显示输出:/ 5

  2. 如何 “告诉” AWK只搜索AA(不AAA)=力模式来匹配全字

感谢您的任何帮助。

编辑:

将有可能添加的条件,如果不符合任何字符串,打印0/5

回答

3

搜索将采取其他字符串也将有这样的串在其中,所以尝试以下。

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

或与您的显示变量名等

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

编辑: OP添加添加0到输出,如果发现串入INPUT_FILE没有匹配的附加要求,下面可以帮助相同。

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

嗨,谢谢你的回复。但仍然显示空的第一个地方像/ 5,任何想法我做错了什么? – Geroge

+0

您能否确保该变量设置为值?我的意思是shell变量?让我知道,因为我得到正确的输出只。 – RavinderSingh13

+0

我在你的第一个例子中看到你在双引号中有变量var。这是必要的吗? – Geroge

1

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

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

^=行首。

$ =行结束。

所以AAA不算。

+0

是的,这是作品。但它计算AA和AAA - 所以我有3/5而不是1/5。所以我只需要匹配整个单词..任何想法? – Geroge

+0

Try:grep^AA $ input,打印多少行? – flu

+0

有了这种模式,AAA不应该被计算在内。 – flu