単語数を数え、与えられたパターンに正確に一致する行を印刷する方法は?

単語数を数え、与えられたパターンに正確に一致する行を印刷する方法は?

単語数を数え、次のパターンと正確に一致するパターン行を印刷したいと思います。

abc-ERROR:

入力ファイルには以下が含まれます。

# abc-ERROR: xyxxkkfgfr
# def-Error: aaaaaa
# abc-ERROR.cpp

出力は次のようになります。

 1   (count)
 # abc-ERROR: xyxxkkfgfr   (line)

答え1

grepを使用して行数と行数を取得できますgrep -c。 2回実行するのが好きではない場合は、置換をgrep使用して処理できますtee(ここにbash構文があります)。

grep abc-ERROR: input.txt | tee >( wc -l )

答え2

これはどうですか:

$ cat file
# abc-ERROR: xyxxkkfgfr
# abc-ERROR: xyxxkkfgfr
# abc-ERROR: xyxxkkfgfr
# def-Error: aaaaaa
# abc-ERROR.cp
# abc-ERROR: asdgsdgaaf
# abc-ERROR: asdgsdgaaf
# abc-ERROR: tttttttttq

$ awk '/abc-ERROR: /{a[$0]++}END{for(k in a) printf "%d\t(count)\n%s\t(line)\n",a[k],k}' file
1   (count)
# abc-ERROR: tttttttttq (line)
2   (count)
# abc-ERROR: asdgsdgaaf (line)
3   (count)
# abc-ERROR: xyxxkkfgfr (line)

答え3

私はこの問題を解決するために2つのアプローチを提案します。

1)bashrc / bash_profileに関数を配置し、関数を呼び出すエイリアスを作成します(この関数はグローバルに使用されます)。

2)シェルスクリプトファイルを作成したり、ファイルのエイリアスを生成したりできます。

#!/bin/bash
function matchString(){
REGEX="$1"
FILE="$2"
RESULTS=$(grep -n "$REGEX" $FILE | awk -F ":" '{print $2 "\tLine: " $1}')
COUNT=$(echo $RESULTS | wc -l)
echo "Count: $COUNT"
echo $RESULTS
}
matchString $1 $2

テキストファイル(例:bash matchString.sh "abc-ERROR:" test.txt)に対してこれを呼び出すと、次のように出力されます。

数量:1

abc - エラー行:1

- この関数は、最初の引数を正規表現パターンとして使用して(同様のシナリオで再利用可能)、そのパターンの2番目の引数として呼び出されたファイルを取得します。

出力の最初の行は一致するすべての行の総数であり、その後の各行は一致項目で、その後に対応する一致の行番号を表すタブ文字が続きます。

関連情報