文字列入力で大文字と小文字の数を計算するシェルスクリプト

文字列入力で大文字と小文字の数を計算するシェルスクリプト

ASCII値を使用して文字列の大文字と小文字の数を見つけるには、シェルスクリプトを使用することをお勧めします。

答え1

perl -Mopen=locale -e '
  $_="@ARGV";
  printf "upper: %d\nlower: %d\n", y/A-Z//, y/a-z//' -- "$myvar"

ABCDEFGHIJKLMNOPQRSTUVWXYZおよびabcdefghijklmnopqrstuvwxyz文字の発生回数が印刷されます$myvar

そしてzsh

printf 'upper: %d\nlower: %d\n' ${#myvar//[^A-Z]} ${#myvar//[^a-z]}

またはkshbash

upper=ABCDEFGHIJKMLNOPQRSTUVWXYZ
lower=abcdefghijklmnopqrstuvwxyz
u=${myvar//[^$upper]} l=${myvar//[^$lower]}
printf 'upper: %d\nlower: %d\n' "${#u}" "${#l}"

POSIX的に:

upper=ABCDEFGHIJKMLNOPQRSTUVWXYZ
lower=abcdefghijklmnopqrstuvwxyz
u=$(printf %s "$myvar" | tr -cd "$upper" | wc -m)
l=$(printf %s "$myvar" | tr -cd "$lower" | wc -m)
printf 'upper: %d\nlower: %d\n' "$u" "$l"

しかし、GNUのようないくつかのtr実装はtr互換性がなく、ASCII文字と同じエンコーディングを持つ文字部分を計算することができます。たとえば、zh_HK.big5hkscsGNUシステムのロケールでは、次のようになります。

$ LC_ALL=zh_HK.big5hkscs luit
$ printf Э | tr -cd ABCDEFGHIJKLMNOPQRSTUVWXYZ | wc -c
1

のエンコーディングには、Э次のエンコーディングが正確に含まれますR

$ printf Э | hd
00000000  c8 52                                             |.R|
00000002

答え2

牛に似た一種の栄養awk解決策:

s="Kyiv is the city of Archistratigus Michael ..."
awk 'BEGIN{ FPAT="[a-zA-Z]"; l=u=0 }
     {
         for (i=1; i<=NF; i++) ($i~/[a-z]/)? l++ : u++; 
         printf "upper: %d, lower: %d\n", l, u 
     }' <<<"$s"

出力:

upper: 33, lower: 3

  • FPAT="[a-zA-Z]"- フィールド値のパターンを定義します。 (大文字と小文字のみが考慮されます。)

答え3

使用できる文字数を数えるにはgrepそして単純な正規表現で。ティーそしてトイレ

myVar="Valdeir Psr"
echo -n $myVar | grep -o [A-Z] | tr -d "\n" | wc -m

各コマンドの機能は次のとおりです。

echo -n -->変数値を出力します。

grep -o [A-Z] -->大文字のフィルタリング

tr -d "\n" -->改行文字の削除

wc -m --> 文字数を出力します。

小文字を計算するには、[A-Z]次のように置き換えます。[a-z]

答え4

文字列の小文字数を計算します。

for i in {a..z}; do
  echo "Praven" | awk -v i="$i" '$1~i {print i}';
done | wc -l

出力

5

大文字を検索するには、a..zに置き換えますA..Z

関連情報