数字を1文字(数字)と同じ値に置き換える

数字を1文字(数字)と同じ値に置き換える

すべてのファイルタイプの検索を使用してfile -b $(find . -type f)一意のカテゴリに分類し、同じ数の「#」に置き換えられた数字で最初の4つのカテゴリを印刷する必要があります。出力は次のようになります。

 8 empty                      : ########
 6 ASCII text                 : ######
 3 Vim swap file, version 7.4 : ###
 1 UTF-8 Unicode text         : #

各カテゴリのファイル数を「#」マークで印刷する方法がわかりません。

各行の数値を値として、最後に同じ数の「#」マークを入れたいです。

ベストアンサー1

「N文字列で数値Nを表現する方法」という主な質問に答えるには、次のようなシェルコマンドがあります。

n=17          # Number to translate to a sequence
printf "%${n}s" '' | tr ' ' '#'

(代替構文:printf '%*s' "$n" '' | tr ' ' '#';他の選択肢がある場合は、ポイントがわかります)

これが行うことは、n空白(printf部分)で構成される空白行を作成し、各スペースを目的の文字(tr部分)に変換することです。

count_files質問に含まれるリストを出力するコマンドがあると仮定すると、次のようにコマンドを使用できます。

count_files \
| while read n type; do 
    printf '%4d %-30s %s\n' "$n" "$type" "$(printf "%${n}s" '' | tr ' ' '#')"
done

...そして、次のような結果が得られます。

   8 empty                          ########
   6 ASCII text                     ######
   3 Vim swap file, version 7.4     ###
   1 UTF-8 Unicode text             #

おすすめ記事