
出力は次のようになります。
2015/1/7 8
2015/1/8 49
2015/1/9 40
2015/1/10 337
2015/1/11 11
2015/1/12 3
2015/1/13 9
2015/1/14 102
2015/1/15 62
2015/1/16 10
2015/1/17 30
2015/1/18 30
2015/1/19 1
2015/1/20 3
2015/1/21 23
2015/1/22 12
2015/1/24 6
2015/1/25 3
2015/1/27 2
2015/1/28 16
2015/1/29 1
2015/2/1 12
2015/2/2 2
2015/2/3 1
2015/2/4 10
2015/2/5 13
2015/2/6 2
2015/2/9 2
2015/2/10 25
2015/2/11 1
2015/2/12 6
2015/2/13 12
2015/2/14 2
2015/2/16 8
2015/2/17 8
2015/2/20 1
2015/2/23 1
2015/2/27 1
2015/3/2 3
2015/3/3 2
ヒストグラムを描きたいのですが
2015/1/7 ===
2015/1/8 ===========
2015/1/9 ==========
2015/1/10 ====================================================================
2015/1/11 ===
2015/1/11 =
...
それを可能にする bash コマンドがあるかどうかご存知ですか?
答え1
でperl
:
perl -pe 's/ (\d+)$/"="x$1/e' file
e
により式が評価され、( に一致する数値)=
の値を使用して繰り返し処理が行われます。$1
(\d+)
- 行を短くするに
"="x($1\/3)
は、 の代わりにを使用します。(置換コマンドの途中なので はエスケープされます。)"="x$1
/
bash
(インスピレーションを受けて)このSOの答え):
while read d n
do
printf "%s\t%${n}s\n" "$d" = | tr ' ' '='
done < test.txt
printf
2 番目の文字列をスペースで埋めて幅を$n
(%${n}s
) にし、スペースを に置き換えます=
。- 列はタブ (
\t
) を使用して区切られていますが、 にパイプすることで見栄えを良くすることができますcolumn -ts'\t'
。 - 行を短くするに
$((n/3))
は、 の代わりにを使用できます。${n}
別のバージョン:
unset IFS; printf "%s\t%*s\n" $(sed 's/$/ =/' test.txt) | tr ' ' =
私が見つけた唯一の欠点は、スケールダウンしたい場合に の出力を何かにパイプする必要があることですsed
。それ以外の場合は、これが最もクリーンなオプションです。入力ファイルに のいずれかが含まれている可能性がある場合は、[?*
コマンドの先頭に を付ける必要がありますset -f;
。
答え2
これを試してみてくださいパール:
perl -lane 'print $F[0], "\t", "=" x ($F[1] / 5)' file
説明:
-a
は明示的な配列なのでsplit()
、@F
値を取得します$F[n]
x
Perlに文字をN回印刷するように指示する($F[1] / 5)
: ここで数値を取得し、それを 5 で割ってきれいな印刷出力を作成します (単純な算術)
答え3
簡単にawk
awk '{$2=sprintf("%-*s", $2, ""); gsub(" ", "=", $2); printf("%-10s%s\n", $1, $2)}' file
2015/1/7 ========
2015/1/8 =================================================
2015/1/9 ========================================
..
..
あるいは私の好きなプログラミング言語で
python3 -c 'import sys
for line in sys.stdin:
data, width = line.split()
print("{:<10}{:=<{width}}".format(data, "", width=width))' <file
答え4
$ mlr --nidx --repifs --ofs tab bar -f 2 file
2015/1/7 ***.....................................
2015/1/8 *******************.....................
2015/1/9 ****************........................
2015/1/10 ***************************************#
2015/1/11 ****....................................
2015/1/12 *.......................................
.
.
.