いくつかのテキストファイルがあり、それぞれに文字が表示される回数をカウントしたいのですが?
具体的には、UNIXシェルを使用して、次の形式でこれを行います。 ....何かをする...
これを行うwcコマンドを取得する方法はありますか?
grep char -o filename | wc -l
別の選択肢:
tr -d -C X <infile | wc -c
xはカウントする文字または文字列で、infileは入力ファイルです。
echo "a/b/c/d/e/f/g" | awk -F "/" '{print NF}'
これは、文字「/」の出現回数を示します
awk '{ printf "%s\n", gsub( "ur_char", "oth_char", $0 ) }' < your_file_name > output.txt
現在の行番号のカウントを追加して、awkの行番号も取得できます。
Grepの代替:
sed 's/[^x]//g' filename | tr -d '\012' | wc -c
ここで、x
はカウントする文字です。
簡単に試すことができます:grep -c 'YOUR LETTER' YOUR FILE
この場合、文字「|」をカウントしています:
expr `wc -c < filename` \- `tr -d \| < filename | wc -c`
Awkもあります:
$ echo -e "hello world\nbye all" | awk -Fl '{c += NF - 1} END {print c}'
5
-Fl
を-F<your character>
に変更します。
これは、フィールドデリミタを-F
で指定された文字に設定し、各行のフィールド数-1を累積することにより機能します(デリミタが1つある場合は2つのフィールドがあるため、1のみカウントする必要があります)。
で試してみてください
grep [PATTERN] -o [FILE] | wc -l
不要な場合は猫を使用しないでください。
別の方法があります
cat input_file | \
awk 'BEGIN {FS="x"; var=0 } \
{if (NF>0){ var=var + (NF-1) } } \
END{print var}'
xはカウントする文字または文字列で、infileは入力ファイルです