2013-10-28 62 views
0

我想在Linux中使用下面的命令编写一个bash脚本AWKSEDgrepcurl找到一个特定的Word,然后对它进行计数。Linux Bash脚本

这里是我的脚本:

#!/bin/sh 

echo "URL:" 
read url 
urlsou=$(curl -s "$url") 
result=$(awk '/test/ {f=1} /link/ {g=1} /WOW/ {h=1} !f && !g && h; /testend/ {f=0} /linkend/ {g=0} /wow/ {h=0}' | grep -o "WOW" | grep -c "WOW") 
echo "Total :" "$result" 

我得到0时,我用我的剧本,但我只用AWK命令如下AWK与具有HTML源awk '/test/ {f=1} /link/ {g=1} /WOW/ {h=1} !f && !g && h; /testend/ {f=0} /linkend/ {g=0} /wow/ {h=0}' example | grep -o "WOW" | grep -c "WOW"我得到正确的答案文件。

这里是我的示例文件(但我真正的文件是很复杂):

WOW1wow 
linklinkend 
wow1WOWwow123WOW 
testtestend 
WOWWwow 
link WOW test testend linkend wow 
WOW2wow 
link WOW 123 wow linkend 
  1. 尝试用awk '/test/ {f=1} /link/ {g=1} /WOW/ {h=1} !f && !g && h; /testend/ {f=0} /linkend/ {g=0} /wow/ {h=0}' example | grep -o "WOW" | grep -c "WOW" example结果
  2. awk '/test/ {f=1} /link/ {g=1} /WOW/ {h=1} !f && !g && h; /testend/ {f=0} /linkend/ {g=0} /wow/ {h=0}' example | grep -o "WOW" example结果尝试在
  3. 试用脚本的结果是

正确答案是5

我在想一个问题是我怎么能变量传递urlsou到AWK脚本或者我如何可以创建urlsource临时文件。

我的问题是什么?我怎样才能修复它,而无需任何编程语言或额外的命令?

+2

欢迎堆栈溢出!我很抱歉,但是我完全不清楚你在问什么。也许你可以尝试以不同的方式表述它?谢谢。 –

+0

您的'结果'行没有任何输入作为您的测试行,使用'example'作为输入。例如:'result = $(awk'/ test/{f = 1}/link/{g = 1}/WOW/{h = 1}!f &&!g && h;/testend/{f = 0}/linkend /例如| grep -o“WOW”| grep -c“WOW”| grep -o“WOW”| grep -c“WOW”)' – Jotne

回答

0

尝试这样做:

#!/bin/bash 

echo "URL:" 
read url 
urlsou=$(curl -s "$url") 
# \b is "word boundaries" 
result=$(sed 's/\b/\n/g' <<< "$urlsou" | grep -c WOW) 
echo "Total :" "$result" 

你提到你不想学习另一种语言,OK。但要知道,这仅仅是一个快速的''''''''''''''''''脚本,

+0

,我已经将它写入PERL,但是我想使用这些命令。我可以写'awk'/ test/{f = 1}/link/{g = 1}/WOW/{h = 1}!f &&!g && h;/testend/{f = 0}/linkend/{g = 0} /哇/ {h = 0}'<<< $ urlsou' – MSK

0

这里是man grep的提取物:

-c$--count

禁止正常输出;而是为每个输入文件打印一个匹配行数。通过-v--invert-match option(请参见下文)计算不匹配的行。 (-c由POSIX指定)。

现在,这里是你的命令的末尾:

awk ... | grep -o "WOW" | grep -c "WOW" | grep -o "WOW" | grep -c "WOW" 

你最后grep -o "WOW"永远不会工作,因为它适用于计数。

然后我认为它在这里得到了很多管道。我相信可以在单个awk中做到这一点...但是,您应该给我们更多关于输入流和预期输出的细节。

+0

** FYI **我已编辑我的文章。我没有'AWK'命令的问题,但在脚本无法正常工作。当我使用'AWK'命令时,包含一个源文件,然后我得到正确的答案,但在**脚本** :(: – MSK

+0

好吧,'grep -c'就足够了,'grep -o'没有用;) –

+0

否则,请检查awk读取的文件的权限和路径。我们需要更多的细节,这将使我们能够提供最佳的解决方案(输入文件和期望输出的例子)。 –

0

在你的脚本awk从STDIN中读取。你应该卷曲的输出传递给它:

最简单的方法是:

result=$(awk '/test/ {f=1} ...' $urlsou | ... 

另一种方式是管道卷曲的直接输出给AWK:

curl -s "$url" | awk '...' | ...