前のコマンド(パイプライン)の引数を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

答え2

POのアプローチに応じて、awkをPerlに置き換えます。 "Perl -ae"はawkに非常に似ています。

... | perl -ae ' printf "%-20s %d %s\n", $F[0], $F[1],"▄"x$F[1]'
aa                  12 ▄▄▄▄▄▄▄▄▄▄▄▄
bb                  23 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄

編集:Awkを使用すると、次のように実行できます。

... | awk '{printf "%-20s %d %.*s\n",$1,$2,$2,"▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄"}'

printf関数形式(C、Awk、Perl、printfコマンドなどの場合)少しトリッキーです。以下は文字列を使用した例です。

  • "%.20s,str- 幅=最大(20、長さ(str))、ソート=左
  • "%20s",str - 幅 = max(20, len(str)), ソート = 右
  • "%.20s",str- width=min(20,len(str)), len>20 なら切り捨て
  • "%20.20s,str- 幅=20、len>20の場合、切り捨て、整列=右
  • "%*s",30,str- はいprintt("%30s",str)
  • "%.*s",30,str- はいprintt("%.30s",str)

答え3

@JJoaoの助けを借りて私が思いついたものは次のとおりです。

$ history | tr -s ' ' | cut -d ' ' -f3 | sort | uniq -c | sort -nr | head | awk '{ printf "%-25s %-4d", $2, $1, n = $1 / 5; s = sprintf("%*.s", n, ""); gsub(/ /, "◼", s); print s }'
history                   227 ◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼
./rebar3                  30  ◼◼◼◼◼◼
cat                       26  ◼◼◼◼◼
cd                        24  ◼◼◼◼
docker                    21  ◼◼◼◼
ps                        20  ◼◼◼◼
bin/erlang_cowboy         19  ◼◼◼
sudo                      13  ◼◼
nix-env                   8   ◼
nix-channel               8   ◼

「大きな問題」ではありませんが、仕事に必要なものです。

関連情報