前のコマンド(パイプライン)の引数をawk / printf関数に渡し、出力形式を指定します。

前のコマンド(パイプライン)の引数をawk / printf関数に渡し、出力形式を指定します。

フィルタリングしようとしています。最も一般的に使用されるコマンドそして何とか印刷してみてください。これまでに必要な「フィルター」を正常に配置しました。

$ 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

おすすめ記事