표준 입력에서 일련의 숫자를 그래픽으로 표시하려면 어떻게해야합니까?


38

긴 텍스트 파일이 있고 주어진 패턴이 발생하는 모든 줄을 표시하려면 다음을 수행하십시오.

grep -n form innsmouth.txt | cut -d : -f1

이제 일련의 숫자가 있습니다 (한 줄에 하나의 숫자)

x 축과 y 축의 줄 번호로 2D 그래픽 표현을 만들고 싶습니다. 어떻게하면 되나요?

여기에 이미지 설명을 입력하십시오


1
발생의 의미를 설명해 주시겠습니까? 파일에서 특정 숫자가 몇 번이나 발견 되었습니까? 아니면 x 축의 숫자의 실제 값과 y 축의 숫자가 발견 된 줄 번호를 원합니까?
terdon

패턴이 발견 된 순서대로 발생합니다. 예 : 400 번째 줄의 첫 번째, 410 번째 줄의 두 번째, 412 번째 줄의 세 번째 ...
Abdul Al Hazred

답변:


44

gnuplot이것을 위해 사용할 수 있습니다 :

 primes 1 100 |gnuplot -p -e 'plot "/dev/stdin"'

다음과 같은 것을 생성합니다

여기에 이미지 설명을 입력하십시오

그래프 모양을 마음에 맞게 구성하고 다양한 이미지 형식으로 출력 할 수 있습니다.


2
gnuplot을 다운로드했으며 다음을 입력하여 테스트하려고했습니다. seq 100 | gnuplot -p -e 'plot "/ dev / stdin"'. 이상하게도 그래프가 나타나지 않았지만 종료 코드 (echo $?)는 0이므로 오류도 나타나지 않았습니다.
압둘 알 Hazred

설치 않았다 @AbdulAlHazred gnuplotgnuplot-x11? 전자의 경우, 대화 형 플롯이 아닌 파일 출력 (예 : pdf, png 등의 파일 생성 ) 만 화면에 직접 제공합니다.
steeldriver

@AbdulAlHazred : 방금 수행 seq 100 >seq.dat한 다음 gnuplot대화식으로 프롬프트 유형으로 실행 하면 어떻게됩니까 plot "seq.dat"?
Nate Eldredge

@steeldriver Failed to initialize wxWidgets.gnuplot-x11에 오류 가 있습니다 ... 둘 중 하나를 사용해야합니까? 또는 수 모두 gnuplotgnuplot-x11설치?
3kstc

1
아주 좋은; notitle제목없이 줄거리에 추가하십시오 .
Victoria Stuart

13

나는 이것을 할 것이다 R. 설치해야하지만 배포 리포지토리에서 사용할 수 있습니다. 데비안 기반 시스템의 경우 다음을 실행하십시오.

sudo apt-get install r-base

그것은 또한 가져와야 r-base-core하지만 그렇지 않은 경우 에도 실행하십시오 sudo apt-get install r-base-core. R설치 한 후에 는 간단한 R 스크립트를 작성할 수 있습니다.

#!/usr/bin/env Rscript
args <- commandArgs(TRUE)
## Read the input data
a<-read.table(args[1])
## Set the output file name/type
pdf(file="output.pdf")
## Plot your data
plot(a$V2,a$V1,ylab="line number",xlab="value")
## Close the graphics device (write to the output file)
dev.off()

위의 스크립트는이라는 파일을 만듭니다 output.pdf. 나는 다음과 같이 테스트했다.

## Create a file with 100 random numbers and add line numbers (cat -n)
for i in {1..100}; do echo $RANDOM; done | cat -n > file 
## Run the R script
./foo.R file

내가 사용한 임의의 데이터에서 다음을 생성합니다.

여기에 이미지 설명을 입력하십시오

나는 당신이 무엇을 계획하고 있는지 완전히 확신하지 못하지만 적어도 올바른 방향으로 당신을 가리켜 야합니다.


내 Rscript v3.4.4는 ggplot 또는 plot 사용 여부에 관계없이 기본적으로 plots.pdf를 생성합니다.
Vorac

@Vorac 다른 답변에 댓글을 달고 싶습니까? ggplot은 무엇과 관련이 있습니까? 그리고 기본 출력 파일 이름이 왜 관련이 있습니까?
terdon

내 데비안 시스템에서이 스크립트 서브 세트 #!/usr/bin/env Rscript; args <- commandArgs(TRUE); a<-read.table(args[1]); plot(a$V2,a$V1,ylab="line number",xlab="value");는 같은 디렉토리에 Rplots.pdf를 생성하기에 충분 합니다.
Vorac

1
물론 @Vorac. 그러나 출력 파일 이름을 선택하고 싶습니다. 그리고 더 중요한 것은 어떻게 스크립트를 작성할 수 있는지 보여줍니다. 그렇지 않으면 RScript를 실행할 때마다 동일한 이름을 사용하고 소중한 실행 결과를 덮어 씁니다.
terdon

11

매우 간단한 터미널 출력으로 충분하고 역축으로 만족할 수있는 경우 다음을 고려하십시오.

seq 1000   |
grep -n 11 |
while IFS=: read -r n match
do  printf "%0$((n/10))s\n" "$match"
done

위의 차트는 의 출력에서 패턴 11이 나타날 때마다 10 % 스케일로 반전 된 경향을 보여 seq 1000줍니다.

이처럼 :

11
        110
        111
        112
        113
        114
        115
        116
        117
        118
        119
                  211
                            311
                                      411
                                                511
                                                          611
                                                                    711
                                                                              811
                                                                                        911

점과 발생 횟수는 다음과 같습니다.

seq 1000    |
grep -n 11  | {
i=0
while IFS=: read -r n match
do    printf "%02d%0$((n/10))s\n" "$((i+=1))" .
done; }

... 인쇄 ...

01 .
02           .
03           .
04           .
05           .
06           .
07           .
08           .
09           .
10           .
11           .
12                     .
13                               .
14                                         .
15                                                   .
16                                                             .
17                                                                       .
18                                                                                 .
19                                                                                           .

당신은 더 많은 작업을하여 예와 같이 축을 얻을 수 tput- 당신은해야 할 것 \033[A탈출 (또는 터미널 에뮬레이터와 호환되는 등 상당)를 각각 발생에 대한 행까지 커서를 이동합니다.

awkprintf지원이 POSIX-shell과 같이 공간 패딩을 지원하는 경우 printf이를 사용하여 동일하고 훨씬 더 효율적으로 수행 할 수 있습니다. 그러나 사용 방법을 모르겠습니다 awk.


1

PDF를 출력하고 선을 그릴 수 있도록 Nate의 답변 향상 rsvg-convert:

| gnuplot -p -e 'set term svg; set output "|rsvg-convert -f pdf -o out.pdf /dev/stdin"; plot "/dev/stdin" with lines'

0

또는 파이프를 통해 stdout 데이터를 사용자 정의 파이썬 스크립트로 리디렉션 할 수 있습니다. 이를 통해 데이터를 구문 분석, 사전 처리 및 시각화 할 때 엄청난 양의 사용자 정의 및 유연성을 확보 할 수 있습니다.

여기에 내가 의도 한대로 정확하게 쓴 튜토리얼이 있습니다. 링크

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.