0

AWK SED grep curl特定の 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になりますが、HTMLソースを持つファイルで次のAWKコマンドのみを使用すると、正しい回答が得られます。AWKawk '/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結果が5で試してみてください
  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結果は4
  3. スクリプトで試してみると結果は0です

正解は 5

問題は、スクリプトで urlsou 変数を AWK に渡す方法、または urlsource の一時ファイルを作成する方法にあると思います。

私の問題は何ですか?プログラミング言語や追加のコマンドなしでどうすれば修正できますか?

4

3 に答える 3

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"

別の言語を学びたくないとおっしゃいましたね。ただし、これはただの簡単なスクリプトであり、それ以上のものではないことを知っておいてください。

于 2013-10-28T22:21:33.960 に答える
0

スクリプトでは、awk は STDIN から読み取ります。curl の出力をそれに渡す必要があります。

最も簡単な方法は次のとおりです。

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

もう 1 つの方法は、curl の出力を awk に直接パイプすることです。

curl -s "$url" | awk '...' | ...
于 2014-02-06T08:07:32.507 に答える
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 でそれを行うことは可能だと確信しています...ただし、入力ストリームと予想される出力の詳細をお知らせください。

于 2013-10-28T22:34:22.523 に答える