긴 텍스트 파일이 있고 주어진 패턴이 발생하는 모든 줄을 표시하려면 다음을 수행하십시오.
grep -n form innsmouth.txt | cut -d : -f1
이제 일련의 숫자가 있습니다 (한 줄에 하나의 숫자)
x 축과 y 축의 줄 번호로 2D 그래픽 표현을 만들고 싶습니다. 어떻게하면 되나요?
긴 텍스트 파일이 있고 주어진 패턴이 발생하는 모든 줄을 표시하려면 다음을 수행하십시오.
grep -n form innsmouth.txt | cut -d : -f1
이제 일련의 숫자가 있습니다 (한 줄에 하나의 숫자)
x 축과 y 축의 줄 번호로 2D 그래픽 표현을 만들고 싶습니다. 어떻게하면 되나요?
답변:
gnuplot
이것을 위해 사용할 수 있습니다 :
primes 1 100 |gnuplot -p -e 'plot "/dev/stdin"'
다음과 같은 것을 생성합니다
그래프 모양을 마음에 맞게 구성하고 다양한 이미지 형식으로 출력 할 수 있습니다.
gnuplot
나 gnuplot-x11
? 전자의 경우, 대화 형 플롯이 아닌 파일 출력 (예 : pdf, png 등의 파일 생성 ) 만 화면에 직접 제공합니다.
seq 100 >seq.dat
한 다음 gnuplot
대화식으로 프롬프트 유형으로 실행 하면 어떻게됩니까 plot "seq.dat"
?
Failed to initialize wxWidgets.
gnuplot-x11에 오류 가 있습니다 ... 둘 중 하나를 사용해야합니까? 또는 수 모두 gnuplot
와 gnuplot-x11
설치?
notitle
제목없이 줄거리에 추가하십시오 .
나는 이것을 할 것이다 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
내가 사용한 임의의 데이터에서 다음을 생성합니다.
나는 당신이 무엇을 계획하고 있는지 완전히 확신하지 못하지만 적어도 올바른 방향으로 당신을 가리켜 야합니다.
#!/usr/bin/env Rscript; args <- commandArgs(TRUE); a<-read.table(args[1]); plot(a$V2,a$V1,ylab="line number",xlab="value");
는 같은 디렉토리에 Rplots.pdf를 생성하기에 충분 합니다.
매우 간단한 터미널 출력으로 충분하고 역축으로 만족할 수있는 경우 다음을 고려하십시오.
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
탈출 (또는 터미널 에뮬레이터와 호환되는 등 상당)를 각각 발생에 대한 행까지 커서를 이동합니다.
awk
의 printf
지원이 POSIX-shell과 같이 공간 패딩을 지원하는 경우 printf
이를 사용하여 동일하고 훨씬 더 효율적으로 수행 할 수 있습니다. 그러나 사용 방법을 모르겠습니다 awk
.