ファイルに特定の文字が表示される回数を数える方法は?

ファイルに特定の文字が表示される回数を数える方法は?

たとえば、すべての引用符()文字を計算しようとします。"ファイルに含める必要がある以上の引用符があるかどうか心配するだけです。

たとえば、

cluster-env,"manage_dirs_on_root","true"
cluster-env,"one_dir_per_partition","false"
cluster-env,"override_uid","true"
cluster-env,"recovery_enabled","false"

予想される結果:

16

答え1

次のように(単語、行、文字数の計算tr)を結合(文字の翻訳または削除)できます。wc

tr -cd '"' < yourfile.cfg | wc -c

-dc補数のすべての文字を削除して"からc文字(バイト)を計算します。一部のバージョンでは、ASCII以外の文字数に適したフラグをwcサポートできます。-m--chars

答え2

grep方法:

grep -o '"' file | wc -l
16 
  • -o- 一致する部分文字列のみ出力

またはシングル愚かな:

awk -v RS='' -v FPAT='"' '{print NF}' file
16
  • RS=''- 空のレコード区切り記号(新しい行の代わりに)

  • FPAT='"'- フィールド値のパターン定義

答え3

ファイルの2行に奇数個の二重引用符がある場合、二重引用符の合計は偶数になり、バランスのとれない引用符を検出しません(実際にはこれがこれであると思うが間違っている可能性があります)。の)。

このawkスクリプトは、入力行に奇数の引用符がある行を報告します。

awk -F'"' 'NF % 2 == 0 { printf("Line %d has odd quoting: %s\n", NR, $0) }'

フィールド区切り文字()をwithFSに設定しました。これは、行に偶数のフィールドがある場合、奇数の引用符があることを意味します。は最新のレコードのフィールド数で、現在のレコードのシーケンス番号(「行番号」)です。"-F'"'NFNR

次の入力が与えられた場合:

$ cat file
cluster-env,"manage_dirs_on_root","true"
cluster-env,"one_dir_per_partition","false"
cluster-env,override_uid","true"
cluster-env,recovery_enabled","false"

私達は得た

$ awk -F'"' 'NF % 2 == 0 { printf("Line %d has odd quoting: %s\n", NR, $0) }' file
Line 3 has odd quoting: cluster-env,override_uid","true"
Line 4 has odd quoting: cluster-env,recovery_enabled","false"

それはまるで

$ grep -o '"' | wc -l

ファイルに対して「14」を返します。

答え4

もう一つのawk方法:

awk '{ count+=gsub(/"/, "") } END{ print count+0 }'

関連情報