
다음과 같은 출력이 있습니다.
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
$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 *.......................................
.
.
.