フィルタリングしようとしています。最も一般的に使用されるコマンドそして何とか印刷してみてください。これまでに必要な「フィルター」を正常に配置しました。
$ history | tr -s ' ' | cut -d ' ' -f3 | sort | uniq -c | sort -n | tail | awk '{ printf "%s%20s\n", $2, $1 }'
...しかし、出力が正しく取得できません。
次のような最終出力を表示したいと思います。
checkupdates 16 ▄▄▄
find 16 ▄▄▄
./gradlew 17 ▄▄▄
./rebar3 21 ▄▄▄▄
nix-env 24 ▄▄▄▄
cd 26 ▄▄▄▄▄
docker 33 ▄▄▄▄▄▄
rebar3 43 ▄▄▄▄▄▄▄▄
sudo 46 ▄▄▄▄▄▄▄▄▄
flatpak 56 ▄▄▄▄▄▄▄▄▄▄▄
awk
またはを使用したいのですが、printf
出力形式を指定する方法がわかりません。また、コマンドと次の列(番号付けを使用)の間のスペースを管理するのは難しいです。 3番目の列は2番目の列と1つのカンマンスペースです。
添付:▄の尺度は任意の値にすることができます。
ベストアンサー1
xargs
私はあなたが最初の部分を探していると思います。たとえば、
$ echo foo bar| xargs printf "- %s - %s -\n"
- foo - bar -
printfの出力を入力して左に調整するには、次のようにします。
$ echo foobar 19 | xargs printf '%-30s %s'
foobar 19
形式が最も長いコマンド名を受け入れて列を生成するには、最初の列で最も長い引数の長さを確認してから、すべての入力を読み取るまで結果を印刷しないより複雑なものを作成する必要があります。たとえばawk
。