長いテキストファイルがあり、特定のパターンが表示されるすべての行を表示するには、次の手順を実行します。
grep -n form innsmouth.txt | cut -d : -f1
これで一連の数字があります(1行につき1つの数字)。
x軸に発生した回数、y軸に行番号を使用して2Dグラフィック表現を作成したいと思います。この目標をどのように達成できますか?
答え1
使用できるgnuplot
そのために:
primes 1 100 |gnuplot -p -e 'plot "/dev/stdin"'
次のようなものを生産します
チャートの外観を必要に応じて整理し、さまざまな画像形式にエクスポートするなどの操作を実行できます。
答え2
確認してみましょうR
。インストールする必要がありますが、展開リポジトリで使用できます。 Debian ベースのシステムでは、次を実行します。
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
私が使用する任意のデータに基づいて、次のものが生成されます。
私はあなたが何を飾りたいのか完全にはわかりませんが、少なくとも正しい方向を提示しなければなりません。
答え3
非常に簡単な端子印刷で十分で軸反転に満足している場合は、次の点を考慮してください。
seq 1000 |
grep -n 11 |
while IFS=: read -r n match
do printf "%0$((n/10))s\n" "$match"
done
上のチャートは、このパターンが発生するたびに10%スケール反転を示しています。11出力から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
(または端末エミュレータと互換性のあるクラス)カーソルが表示されるたびに、カーソルを1行上に移動します。
空白のパディングをサポートするPOSIXシェルと同じawk
場合は、これを使用して同じことを実行でき、おそらくより効率的です。しかし、どのように使用するのかわかりません。printf
printf
awk
答え4
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'