物理学者(ポスドク)による日々の研究生活のメモ書きです ( python/emacs/html/Japascript/シェルスクリプト/TeX/Mac/C言語/Linux/git/tmux/R/ポケモンGO)
# Linuxのみだが
tac
# Macでは
tail -r
でできるtac
# Macでは
tail -r
■ 参考 : 逆順出力 tac と tail -r
ついで、sortについてメモしておく
sort -k1 -g hoge.txt
で、データが複数列ある場合でも1列目のデータについてソートを行う-nオプションは数字としてソートするときに必要
awkと相性がよい
通常は小さい順に並ぶが逆順にしたいときは
sort -k1 -r -g hoge.txt
(2017/4/13 追記)
上記のソートで sort -k1 -r -nと書いていたけど、nオプションは整数を並べ替えるときに使うっぽい
符号を含んだ実数(+1e-5とか-1e-13)とかは-gオプションを付けてソートする
(2016/12/15 追記)
awkでも同じことができる
こちらは同時にデータの加工もできるので汎用性が高い
またLinux, Macどちらでも動くことも期待できる
awk '{a[NR]=$0}END{for(i=NR;i>0;i--)print a[i]}' hoge.txt
PR
■ 過去記事 : 【condor】shared libraryを使ったプログラムをジョブに渡すとき
condorについて改めて調べてみたのでメモ
■ condor_q をなんども実行するのは面倒な人は、
■ 参考 : Condorを用いたグリッドスケジューリング導入実習
■ 同じジョブを複数個投入する
ただしこのままだと10個とも同じ引数や設定で実行され、出力も同じファイルにされてしまう
(2018/06/21 追記)
■ condorの内部変数をサブミットファイルに活用する
自分が知ってるのは $(Cluster) と $(Process) だけ
これを使うとこんな感じで書けて、異なる出力ファイルに収まるので便利
■ ジョブの削除
■ 計算ノードを指定する
"fedora-virt8.jp.example.org" の部分を置き換えて使う
■ 参考 : Condorを使ってみた(1)
やってみたが、うまくいかない
ジョブ投入後ずっと、idle状態でrun状態にならない・・・
■ 実行順序のあるジョブの実行方法
というのがあるらしいけど、よくわからん
通常のジョブファイルとは別のファイルを作って、condor_submit_dagというコマンドでジョブ投入をするらしい
結局知りたかったことは、ジョブを遅延させて投げる方法だけどわからん・・・・
(2018/06/21 追記)
condorのドキュメントによると、ジョブが使用するメモリーの量を指定するには
他のマクロ変数はマニュアルに載ってる
ここ( http://research.cs.wisc.edu/htcondor/manual/ ) でmacroとかvariableとかで調べると良い
便利そうなものを特に見つけられなかった・・・・
(2020/02/25 追記)
■ 優先度を上げる
ツイート
condorについて改めて調べてみたのでメモ
■ condor_q をなんども実行するのは面倒な人は、
while /bin/true ; do condor_q; sleep 2; clear; done
をaliasに登録しておけば良さそう(またはシェルスクリプトにしておくとか)■ 参考 : Condorを用いたグリッドスケジューリング導入実習
■ 同じジョブを複数個投入する
universe = vanilla
executable = hoge
arguments =
output = out.txt
error = err.txt
log = log.txt
queue 1
これの最後の1を10にすれば、同じジョブを10個投入できるexecutable = hoge
arguments =
output = out.txt
error = err.txt
log = log.txt
queue 1
ただしこのままだと10個とも同じ引数や設定で実行され、出力も同じファイルにされてしまう
(2018/06/21 追記)
■ condorの内部変数をサブミットファイルに活用する
自分が知ってるのは $(Cluster) と $(Process) だけ
これを使うとこんな感じで書けて、異なる出力ファイルに収まるので便利
Universe = vanilla
Executable = hoge
Arguments =
Output = result/out_$(Cluster).$(Process).txt
Error = result/err_$(Cluster).$(Process).txt
Log = result/log_$(Cluster).$(Process).txt
queue 1
Executable = hoge
Arguments =
Output = result/out_$(Cluster).$(Process).txt
Error = result/err_$(Cluster).$(Process).txt
Log = result/log_$(Cluster).$(Process).txt
queue 1
■ ジョブの削除
condor_rm [ID]
または
condor_rm [user name]
または
condor_rm -all
でいけるらしいまたは
condor_rm [user name]
または
condor_rm -all
■ 計算ノードを指定する
Requirements = Machine == "fedora-virt8.jp.example.org"
のようにジョブファイルに書いておけばいけるらしい"fedora-virt8.jp.example.org" の部分を置き換えて使う
■ 参考 : Condorを使ってみた(1)
やってみたが、うまくいかない
ジョブ投入後ずっと、idle状態でrun状態にならない・・・
■ 実行順序のあるジョブの実行方法
というのがあるらしいけど、よくわからん
通常のジョブファイルとは別のファイルを作って、condor_submit_dagというコマンドでジョブ投入をするらしい
結局知りたかったことは、ジョブを遅延させて投げる方法だけどわからん・・・・
(2018/06/21 追記)
condorのドキュメントによると、ジョブが使用するメモリーの量を指定するには
The request_memory command is included to ensure that the mathematica jobs match with and then execute on pool machines that provide at least 1 GByte of memory.
####################
#
# Example 3: demonstrate use of multiple # directories for data organization.
#
####################
executable = mathematica
universe = vanilla
input= test.data
output = loop.out
error= loop.error
log= loop.log
request_memory = 1 GB
initialdir = run_1
queue
initialdir = run_2
queue
みたいな書き方でいいらしい####################
#
# Example 3: demonstrate use of multiple # directories for data organization.
#
####################
executable = mathematica
universe = vanilla
input= test.data
output = loop.out
error= loop.error
log= loop.log
request_memory = 1 GB
initialdir = run_1
queue
initialdir = run_2
queue
他のマクロ変数はマニュアルに載ってる
ここ( http://research.cs.wisc.edu/htcondor/manual/ ) でmacroとかvariableとかで調べると良い
便利そうなものを特に見つけられなかった・・・・
(2020/02/25 追記)
■ 優先度を上げる
condor_prio +1 [job ID]
#!/bin/sh
for i in `seq 10 25`
do
SIZE=$((2 ** $i))
echo $SIZE
done
for i in `seq 10 25`
do
SIZE=$((2 ** $i))
echo $SIZE
done
$(())の書き方が万能過ぎ・・・
ffmpeg先生の出番かな?と思って調べてみたらconvertコマンドですごく簡単にできたので・・・
例えば10を入れると1枚の画像を100分の10秒間表示する
loopは何回ループさせるか
例えば1を入れると1回だけしか表示されない 0は永久にループする
ただしMacのQuiclookで見るとこの設定を無視してループされるので注意
*.pngのところはhoge1.png hoge2.png hoge3.pngみたいに直接並べてもOK
他にも画像のサイズとかを変えたりとかあるらしいけど、基本的にはこれでOK
(2017/1/2 追記)
出力するgifを元の画像サイズからリサイズするときは
-size 600x480!というオプションではうまくいかなかったので注意
-resize 1000x
とすると、width=1000の画像ができる
heightは元の画像のアスペクト比を維持するように自動的に決定される
(2022/09/13 追記)
ファイル名の順番 != convertに渡したいファイル名の順番じゃないときは``を使う
例えば、作成時刻が古い順に渡したいときは
ツイート
convert -delay 10 -loop 0 *.png animation.gif
delayは画像の更新速度例えば10を入れると1枚の画像を100分の10秒間表示する
loopは何回ループさせるか
例えば1を入れると1回だけしか表示されない 0は永久にループする
ただしMacのQuiclookで見るとこの設定を無視してループされるので注意
*.pngのところはhoge1.png hoge2.png hoge3.pngみたいに直接並べてもOK
他にも画像のサイズとかを変えたりとかあるらしいけど、基本的にはこれでOK
(2017/1/2 追記)
出力するgifを元の画像サイズからリサイズするときは
-resize 250x250
または
-scale 50%
を使うまたは
-scale 50%
-size 600x480!というオプションではうまくいかなかったので注意
-resize 1000x
とすると、width=1000の画像ができる
heightは元の画像のアスペクト比を維持するように自動的に決定される
(2022/09/13 追記)
ファイル名の順番 != convertに渡したいファイル名の順番じゃないときは``を使う
例えば、作成時刻が古い順に渡したいときは
convert -delay 10 -loop 0 `ls -1rt *.png` animation.gif
convert -delay 10 -loop 0 -resize 1000x `ls -1rt *.png` animation.gif
convert -delay 10 -loop 0 -resize 1000x `ls -1rt *.png` animation.gif
こんなページを見つけた
■ 参考ページ : シェルで変数のインクリメントに expr を使うと100倍遅い件
(やっべ・・・今までexprずっと使ってたわ・・・・)
ということでexprを置き換えてみたら確かにとんでもなく早くなった・・・(どれくらい早くなったかは測定していないのでわからんが)
記事を読む限り、exprが遅いというよりもバッククオート``が遅いのかな?
とりあえず、覚えておこう
i=`expr $i + 1`
ではなくてi=$(( i + 1))
試してみたらかけ算とか引き算にも使えた
これと、
■ 過去記事 : 【シェルスクリプト】for文の中でインクリメントを使う楽な方法
を組み合わせると、for文の中で色々なことができる
最近知ったがseqという便利なコマンドがあるらしい
使い方は
Macでは
そういうときは
これとfor文を組み合わせて、
■ 過去記事 : 【シェルスクリプト】ファイルを1行ずつ読み込んで処理する
少しだけseqのオプションについてもまとめておく
Macのseqでは
seq -fでC言語のprintf形式のフォーマットと同じものが使える
%dは使えないが、%fは使える、デフォルトは%g
(2016/8/14 追記)
忘れるので追記します
みたいに大きい数字だとなってしまうので、これを整数表示したいときは、上記のフォーマットを応用して、
ツイート
使い方は
% seq 1 10
1
2
3
4
5
6
7
8
9
10
みたいな感じ1
2
3
4
5
6
7
8
9
10
Macでは
% seq 10 0
でも動くけど、別のLinuxではダメだったそういうときは
% seq 10 -1 0
とかでOKこれとfor文を組み合わせて、
for i in `seq 0 5`
do
echo $i
done
とかの使い方が便利do
echo $i
done
■ 過去記事 : 【シェルスクリプト】ファイルを1行ずつ読み込んで処理する
少しだけseqのオプションについてもまとめておく
Macのseqでは
% seq -h
usage: seq [-w] [-f format] [-s string] [-t string] [first [incr]] last
seq -wで桁を揃えるための0埋めをしてくれるusage: seq [-w] [-f format] [-s string] [-t string] [first [incr]] last
% seq -w 1 10 90
01
11
21
31
41
51
61
71
seq -sで区切り文字を指定できる01
11
21
31
41
51
61
71
%seq -s- 1 10 90
1-11-21-31-41-51-61-71-81-
1-11-21-31-41-51-61-71-81-
seq -fでC言語のprintf形式のフォーマットと同じものが使える
%dは使えないが、%fは使える、デフォルトは%g
%seq -f'%02f' 1 5
(2016/8/14 追記)
忘れるので追記します
% seq 1000000 1000000 5000000
1e+06
2e+06
3e+06
4e+06
5e+06
1e+06
2e+06
3e+06
4e+06
5e+06
みたいに大きい数字だとなってしまうので、これを整数表示したいときは、上記のフォーマットを応用して、
% seq -f "%.0f" 1000000 1000000 5000000
1000000
2000000
3000000
4000000
5000000
1000000
2000000
3000000
4000000
5000000
if [[ "$i" =~ ^[0-9]+$ ]]; then
#数字
echo "$i is number"
else
# 数字ではない
echo "$i is not number"
fi
#数字
echo "$i is number"
else
# 数字ではない
echo "$i is not number"
fi
ただのメモDEATH
UNIX時刻は協定世界時(UTC)での1970円1月1日の0:00:00(深夜0時)からの経過秒数
ただし、うるう秒を足し引きして考慮する
計算機内ではunsigned intで扱われているので、32bitマシンでは上限が2,147483647なので、2038年には何かトラブルが起こるかも
オーバーフローしてマイナスになる?
最近のマシンはすべて64bitなので影響はない
現在のUNIX時刻を取得
こっちはうまくいかなかった
1日前を取得
Macでは
(2022/06/03 追記)
ツイート
UNIX時刻は協定世界時(UTC)での1970円1月1日の0:00:00(深夜0時)からの経過秒数
ただし、うるう秒を足し引きして考慮する
計算機内ではunsigned intで扱われているので、32bitマシンでは上限が2,147483647なので、2038年には何かトラブルが起こるかも
オーバーフローしてマイナスになる?
最近のマシンはすべて64bitなので影響はない
現在のUNIX時刻を取得
date +%s
こっちはうまくいかなかった
1日前を取得
date --date "1day ago" +%s
dateコマンドにUNIX時刻を渡すdate --date @1382282400
Macでは
date -r "1461828264"
らしい(2022/06/03 追記)
% date +"%Y/%m/%d %H:%M:%S"
2022/06/02 18:16:05
2022/06/02 18:16:05
あるデータ(data.txt)がある、中身は
1 hoge
2 hogeeee
3 foo
4 bar
みたいな2 hogeeee
3 foo
4 bar
ここでcat data.txt | grep "hoge"とすると、hoge以外にhogehogeも引っかかってしまう・・・
解決方法1
grepでやる場合は、
cat hoge.txt | grep 'hoge$'
とすると、行末にあるhogeだけを取り出すことができる^ : 行の先頭を示す
$ : 行の最後を示す
$ : 行の最後を示す
他にもawkとかでも、完全に一致したときしか表示されないのでこれでOK
awk '$2=="hoge"{print }' hoge.txt
タブ文字は\t
改行文字は\n
改行文字は\n
文字の前後はコーテーションで囲まないとだめ
echo -e "abc\n\tdef'"
tcshのときは
今まではこんな感じでやっていた
set prompt = "[%n@hogedayo:%~]"
けど、hostnameを使えばもっと簡単にできるらしいset prompt = "[%n@`hostname`:%~]"
hostnameがもっと長いときはちょっとめんどくさいけど・・・・(2020/03/19 追記)
bashの場合は
export PS1="[\u@\h:\w]"
でまったく同じpromptが作れる
プロンプトで使える変数が簡単にわかるサイトもある
■ 参考 : http://ezprompt.net
LD_LIBRARY_PATHが、ジョブを走らせた側で反映されていないときに起こるらしい
これでかなり詰まった・・・
ジョブで走らせるシェルスクリプトに以下のことを書いておく
export LD_LIBRARY_PATH=hoge/local/lib
または
走らせるジョブスクリプトに
GetEnv= true
と書いておけばいいらしい
lsだとファイルの名前が表示されるだけだが、それを各階層で見やすく整形してくれるtreeコマンドというのがある
Macだとデフォルトで入っていないので、portで入れる
たとえば
色々とオプションが用意されている
■ -Iオプションで、該当するファイルを除外する
■ -aオプションで、隠しファイルも表示される
■ -Lオプションで、何階層まで表示するかを選べる
■ おまけ
findコマンドを使ってtreeみたいなことをしてみる・・・
■ 参考 : treeを使わずにfindでディレクトリツリーリスト表示
ツイート
Macだとデフォルトで入っていないので、portで入れる
sudo port install tree
使い方はtree ./
とかでOKたとえば
% tree ./Matrix/
./Matrix/
├── Matrixlib.o
├── makefile
├── testMatrix
├── testMatrix.c
└── testMatrix.o
0 directories, 5 files
./Matrix/
├── Matrixlib.o
├── makefile
├── testMatrix
├── testMatrix.c
└── testMatrix.o
0 directories, 5 files
色々とオプションが用意されている
■ -Iオプションで、該当するファイルを除外する
% tree ./Matrix/ -I "*.[o]"
./Matrix/
├── makefile
├── testMatrix
└── testMatrix.c
■ -Pオプションで該当するファイルだけを表示する./Matrix/
├── makefile
├── testMatrix
└── testMatrix.c
% tree ./Matrix/ -P "test*"
./Matrix/
├── testMatrix
├── testMatrix.c
└── testMatrix.o
■ -dオプションで、ディレクトリのみを表示する./Matrix/
├── testMatrix
├── testMatrix.c
└── testMatrix.o
■ -aオプションで、隠しファイルも表示される
■ -Lオプションで、何階層まで表示するかを選べる
■ おまけ
findコマンドを使ってtreeみたいなことをしてみる・・・
■ 参考 : treeを使わずにfindでディレクトリツリーリスト表示
% find ./Matrix | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\(
[^ ]\)/|-\1/"
|-Matrix
| |-makefile
| |-Matrixlib.o
| |-testMatrix
| |-testMatrix.c
| |-testMatrix.o
[^ ]\)/|-\1/"
|-Matrix
| |-makefile
| |-Matrixlib.o
| |-testMatrix
| |-testMatrix.c
| |-testMatrix.o
$ cat /etc/redhat-release
$ cat /proc/version
$ cat /proc/cpuinfo
$ cat /proc/meminfo
$ cat /proc/version
$ cat /proc/cpuinfo
$ cat /proc/meminfo
(2021/12/15 追記)
$ cat /etc/os-release
見せられないコマンドを打ってしまったときに、履歴から削除したいとき、
# 履歴を表示
history
# 一括で削除
history -c
# 指定した番号の履歴だけを削除 今は100番だけ
history -d 100
history
# 一括で削除
history -c
# 指定した番号の履歴だけを削除 今は100番だけ
history -d 100
あるディレクトリにあるファイルのリストに対して処理をするときはよく、
今回は、あるファイルに書かれた各行に対してなんらかの処理をする場合、
あとは
(2017/1/18 追記)
上に書いてあるwhile文でデータを読み込むときに、空行を無視する書き方を改めて調べた
というか、この記事のことはまったく忘れていて追記しようと開いたら書いてあった・・・
けど少しだけ書き方が違うのでメモメモ
(2017/6/12 追記)
次の記事に書いてある技術を手にれた今は↑に書いたシェルスクリプトも別の書き方ができるけど
それは今回は置いとく・・・(テストするのめんどくさい・・・・)
■ 参考 : 【シェルコマンド】ディレクトリやファイルの存在確認によって処理を分岐させる
空行だけじゃなくて、コメント行も無視するようにするには次のようにすればOK
done < `grep -v '^\s*#' hoge.txt |grep -v '^\s*$'`
で行けるかと思ったけどなんか動かなかった・・・
なにか大きな勘違いをしてるのかもしれん
■ 参考 : grepでコメント行および空白行を削除する
(2018/09/19 追記)
grepで検索条件を満たすものを結果から除外したいとき
(= 検索条件を満たさないものを表示したいとき)
(クリックしてブログの収益化に貢献オナシャス)
ツイート
#!/bin/sh
for i in `ls *.txt`
do
echo $i
done
のような書き方を使うfor i in `ls *.txt`
do
echo $i
done
今回は、あるファイルに書かれた各行に対してなんらかの処理をする場合、
#!/bin/sh
while read line; do
echo $line
done < $data1
さらにこのファイル$data1に空行が含まれている場合、そこだけ飛ばすようにしたいときは、while read line; do
echo $line
done < $data1
#!/bin/sh
while read line; do
if [ -n "$line" ]; then
echo $line
fi
done < $data1
$lineをダブルコーテーションで囲まないと、そこが空っぽのときにおかしくなるので注意while read line; do
if [ -n "$line" ]; then
echo $line
fi
done < $data1
あとは
hoge=`echo $line | awk '{print $1}'`
とかを使ってそれぞれの値を取り出して処理する感じでOK(2017/1/18 追記)
上に書いてあるwhile文でデータを読み込むときに、空行を無視する書き方を改めて調べた
というか、この記事のことはまったく忘れていて追記しようと開いたら書いてあった・・・
けど少しだけ書き方が違うのでメモメモ
while read line
do
if [ ${#line} -eq 0 ]; then
continue
fi
# do something
echo "hoge"
done <hoge.txt
do
if [ ${#line} -eq 0 ]; then
continue
fi
# do something
echo "hoge"
done <hoge.txt
(2017/6/12 追記)
次の記事に書いてある技術を手にれた今は↑に書いたシェルスクリプトも別の書き方ができるけど
それは今回は置いとく・・・(テストするのめんどくさい・・・・)
■ 参考 : 【シェルコマンド】ディレクトリやファイルの存在確認によって処理を分岐させる
空行だけじゃなくて、コメント行も無視するようにするには次のようにすればOK
#!/bin/sh
grep -v '^\s*#' hoge.txt |grep -v '^\s*$' > tmp.txt
while read line; do
# ここでなんか処理する
echo $line
done < tmp.txt
本当はtmp.txtとか中間ファイルを作りたくなくて、grep -v '^\s*#' hoge.txt |grep -v '^\s*$' > tmp.txt
while read line; do
# ここでなんか処理する
echo $line
done < tmp.txt
done < `grep -v '^\s*#' hoge.txt |grep -v '^\s*$'`
で行けるかと思ったけどなんか動かなかった・・・
なにか大きな勘違いをしてるのかもしれん
■ 参考 : grepでコメント行および空白行を削除する
(2018/09/19 追記)
grepで検索条件を満たすものを結果から除外したいとき
(= 検索条件を満たさないものを表示したいとき)
grep -v "hoge" *.txt
(クリックしてブログの収益化に貢献オナシャス)
シェルスクリプトでも意外と配列が役に立つことがある
書き方がちょっと特殊なのでメモしておく
この配列の中身を全部書きたいときは
■ 参考 : UNIX & Linux コマンド・シェルスクリプト リファレンス > 配列を使用する
(2016/4/4追記)
ちなみに空のリストを作るときは
複数に分かれたtxtファイルを一気にgnuplotでプロットさせる場合にこのリストを使うのがわりと便利そう
例えばこんなコード(こんなださいコードしか書けなくてすいません)
参考程度にどうぞ
(2016/8/14 追記)
絶対忘れるので追記、あと同じ記事にまとめておいた方が便利なので
これらの違いはダブルクォートでくくったときに結果が異なるとかあったけど、今はたぶん関係ないので知らない
リストの一部を表示させたいときは・・・
眠いのでそのうち書けたら書く(たぶん書かないな)
参考にしたページは以下
■ 参考 : bash 配列まとめ
ツイート
書き方がちょっと特殊なのでメモしておく
labellist=("A" "B" "C" "D")
のような感じで宣言するこの配列の中身を全部書きたいときは
echo ${labellist[@]}
ある要素だけを書きたいときはecho ${labellist[$index]}
ちなみにこのindexは0, 1, 2, 3..と増えて行く(1始まりではない)■ 参考 : UNIX & Linux コマンド・シェルスクリプト リファレンス > 配列を使用する
(2016/4/4追記)
ちなみに空のリストを作るときは
hoge=()
hoge=("")として、空の文字列の要素を作ってしまっていたので、最初ここで詰まった複数に分かれたtxtファイルを一気にgnuplotでプロットさせる場合にこのリストを使うのがわりと便利そう
例えばこんなコード(こんなださいコードしか書けなくてすいません)
#!/bin/sh
plotdata=()
i=0
for data in `ls ./*.txt`
do
echo $data
FILE=$data
basename=${FILE##*/} # ディレクトリ名を消して、ファイル名だけにする
filename=${basename%.*} # ファイル名から拡張子を取り除いた部分
# ファイル名からGPS時刻を取得
# ここは関係ないので気にしない
if [ "$i" -eq 0 ]; then
GPS=$filename
echo $GPS
fi
# これでリストに収めていく 通し番号は0, 1, 2, ...
plotdata+=("$data")
echo $i
# リストが10個溜まったらプロットさせる
if [ "$i" -eq 9 ]; then
echo ${plotdata[@]}
gnuplot <<EOF
set term png
set output "${GPS}.png"
set xlabel "GPS[s] - ${GPS}"
set ylabel "something"
set title "hoge" noenhanced
plot "${plotdata[0]}" w l lw 2 notitle,\
"${plotdata[1]}" u (\$1+32):2 w l lw 2 notitle,\
"${plotdata[2]}" u (\$1+32*2):2 w l lw 2 notitle,\
"${plotdata[3]}" u (\$1+32*3):2 w l lw 2 notitle,\
"${plotdata[4]}" u (\$1+32*4):2 w l lw 2 notitle,\
"${plotdata[5]}" u (\$1+32*5):2 w l lw 2 notitle,\
"${plotdata[6]}" u (\$1+32*6):2 w l lw 2 notitle,\
"${plotdata[7]}" u (\$1+32*7):2 w l lw 2 notitle,\
"${plotdata[8]}" u (\$1+32*8):2 w l lw 2 notitle,\
"${plotdata[9]}" u (\$1+32*9):2 w l lw 2 notitle
EOF
i=-1
plotdata=()
# ここでリストを空にする
# これで次の10個が溜まったらまたこの分岐に入って、プロットできる
fi
# for文みたいに通し番号を増やしていく
i=`expr $i + 1`
done
本来書いたコードを修正しつつここに貼付けたので、このままでは動かないかもplotdata=()
i=0
for data in `ls ./*.txt`
do
echo $data
FILE=$data
basename=${FILE##*/} # ディレクトリ名を消して、ファイル名だけにする
filename=${basename%.*} # ファイル名から拡張子を取り除いた部分
# ファイル名からGPS時刻を取得
# ここは関係ないので気にしない
if [ "$i" -eq 0 ]; then
GPS=$filename
echo $GPS
fi
# これでリストに収めていく 通し番号は0, 1, 2, ...
plotdata+=("$data")
echo $i
# リストが10個溜まったらプロットさせる
if [ "$i" -eq 9 ]; then
echo ${plotdata[@]}
gnuplot <<EOF
set term png
set output "${GPS}.png"
set xlabel "GPS[s] - ${GPS}"
set ylabel "something"
set title "hoge" noenhanced
plot "${plotdata[0]}" w l lw 2 notitle,\
"${plotdata[1]}" u (\$1+32):2 w l lw 2 notitle,\
"${plotdata[2]}" u (\$1+32*2):2 w l lw 2 notitle,\
"${plotdata[3]}" u (\$1+32*3):2 w l lw 2 notitle,\
"${plotdata[4]}" u (\$1+32*4):2 w l lw 2 notitle,\
"${plotdata[5]}" u (\$1+32*5):2 w l lw 2 notitle,\
"${plotdata[6]}" u (\$1+32*6):2 w l lw 2 notitle,\
"${plotdata[7]}" u (\$1+32*7):2 w l lw 2 notitle,\
"${plotdata[8]}" u (\$1+32*8):2 w l lw 2 notitle,\
"${plotdata[9]}" u (\$1+32*9):2 w l lw 2 notitle
EOF
i=-1
plotdata=()
# ここでリストを空にする
# これで次の10個が溜まったらまたこの分岐に入って、プロットできる
fi
# for文みたいに通し番号を増やしていく
i=`expr $i + 1`
done
参考程度にどうぞ
(2016/8/14 追記)
絶対忘れるので追記、あと同じ記事にまとめておいた方が便利なので
echo ${#array[@]}
echo ${#array[*]}
で配列の要素数を取得echo ${#array[*]}
これらの違いはダブルクォートでくくったときに結果が異なるとかあったけど、今はたぶん関係ないので知らない
リストの一部を表示させたいときは・・・
眠いのでそのうち書けたら書く(たぶん書かないな)
参考にしたページは以下
■ 参考 : bash 配列まとめ
今回はデータの中に#から始まるコメント行がいくつもあったのでそれを削除したかった・・・
sed '/#/d' hoge.txt
またはgrep -v # hoge.txt
でもOK今までgrepはあるフレーズを含む行をピックアップするものだと思ってましたが、
逆にあるフレーズを含む行以外を表示することもできるらしい
■ 参考
Linux である文字を含む行を削除したい
以前トラブったことでもう一度トラブった
■ 前回の記事
【シェルスクリプト】ファイル名に空白文字が入っていても、なんとかする方法
今回は以前の方法は用いられなかったので、新しくファイル名から半角スペースを削除する方針を取る
#!/bin/sh
for file in ./*
do
mv "$file" `echo $file | tr ' ' '_'`
done
forで今いるディレクトリのファイルをすべて取得for file in ./*
do
mv "$file" `echo $file | tr ' ' '_'`
done
ファイル名に半角スペーズがあれば、すべてアンダースコアに置換
なければ、そのまま
一応これで解決
■ 参考
[Linux Shell] ファイル名のスペースをアンダースコアに変換する方法
自分で作ったplotスクリプトを使っていて、さらなる改良点を見つけてしまった
シェルスクリプトの引数の最後のものを取り出す必要があったので、調べてみた
#!/bin/sh
echo ${@:$#:1}
でいけるらしいecho ${@:$#:1}
参考 :
最後のコマンドライン引数を取得する
$# は引数の数
$@ はシェルスクリプト実行時、もしくは set コマンド実行時に指定された全パラメータが設定される変数。
$* は基本的には$@と同じだけど、"hoge"みたいな""で囲んだときの結果が変わるらしい(試してないけど)
これらを踏まえて
${@:$#:1}
${@:2:4}という書き方で、$2から$6までを表示できるらしい、$2から4つ先の引数を表すということ?
${@:$#:1}だと、$#(引数の数)から1つだけを表示する、つまり最後の引数だけを表示できるということ
なのかな・・・?
一応スクリプトを書いてみたら、きちんと思っている通りに動いたので良しとしておく
今回は使うことがなかったけど、メモしておく
-p 差分作成時の相対ディレクトリを有効にします。
-pが無い時は、全てのファイルが、カレントディレクトリにあると仮定します。
また、-p0 -p1 のように一つづつ増やすことで、記録されている相対ディレクトリが頭から1づつ削られます。
たとえば、/usr/local/src で diffを実行し、patchを作成した場合、/usr/local/src/の同じ場所でパッチを適用する場合は、-p0ですが、一段入って、/usr/local/src/app/でパッチを適用する場合は、-p1とすれば、いいわけです。
ディレクトリに一括でpatchを当てるときの-pオプションの使い方がよくわからなかったけど、
参考リンクにあった説明がすごくわかりやすかった。
■ 参考
patchコマンド-pオプションの覚え書き
diff/patch とは
生きてます
今日からまじめに生きていきます
cat hoge.txt | sed -e "s/AAA/BBB/g"
基本的にはこんな感じの使い方ここでAAAやBBBにどこかのPATHが入っているとエラーが出る
"s/AAA/BBB/g"の真ん中にある/とPATHの/の区別がつかないから
コーテーションマークで区切ればうまくいくかとおもったけどだめ・・・
ググったら、/ではなく|で区切れば良いらしい
参考 : sedが失敗する原因と対処方法
画像投稿アプリ「Twitpic」が9月25日にサービス終了へ Twitterとの商標問題で
いろいろあって、twitpicがサービス終了してしまうらしい
今月の9/25には画像がすべて見れなくなるということで、それまでに引っ越しを完了させなければならない・・・
wget(Macの場合はcurl)とシェルスクリプトを使って全部落とすようなスクリプトを作ろうかなーと思っていたら、すでに作っている人がいた・・・
https://gist.github.com/eligor13/e8a72cac0e606b04a224
これをどこかにコピーして、
$ chmod +x twpicdl.sh
$ mkdir pic
$ twpicdl.sh [twitter account name] ./pic
でダウンロードが始まるはず・・・$ mkdir pic
$ twpicdl.sh [twitter account name] ./pic
pic というディレクトリにimages, html, logsというディレクトリができて
たぶん最終的に images というディレクトリに全部の画像が入るはず
awk -F, '{print $2}' timeseries.csv | sed -e "1d" > hoge.txt
でおkawk の -F, オプションは区切り文字をカンマ(,)にする
sed -eの後の1は1行目を削除するということ
csvの1行目は文字列が書かれていることが多い(ほんと?)
複数行の場合、例えば5-10行目の場合は
sed -e "5,10d"
(2017/07/18 追記)
ちなみにgnuplotでカンマ区切りのデータ(CSV)をそのままプロットするときは
set datafile separator ","
と打てばOK
自分はコマンドで置換を最初にやろうと思ったときに、sedを教えてもらった
色々と便利なんだけど、覚えることがかなりあるので使うときは毎回調べないといけない・・・
そんなときに見つけたのがtrというコマンド
使い方は至ってシンプル
例えばhoge.txtが次のようなデータだったとする
これを
最後に改行を入れたいかどうかでちょっと違うだけ
最初に説明した tr "hoge" "foo" < hoge.txt 以外にも-dオプションを使っている
trのデメリットは1文字での置換しかできない点。
例えば
[4,5,6,4,5]が返ってくるはず。
つまり1を4に、2を5に、3を6にそれぞれ1文字置換してくれている。
複数文字に及ぶ文字列を置換するためにはsedを使うべし。
ツイート
色々と便利なんだけど、覚えることがかなりあるので使うときは毎回調べないといけない・・・
そんなときに見つけたのがtrというコマンド
使い方は至ってシンプル
tr "hoge" "foo" < foo.txt
hoge.txtの中身のうち、hogeをfooに置換してくれる。例えばhoge.txtが次のようなデータだったとする
[1,2,3,4,5]
これを
1
2
3
4
5
のように整形したいときは、2
3
4
5
tr ',' '\n' < hoge.txt | tr ']' '\n' | tr -d '[' >mod_hoge.txt
もしくは
tr ',' '\n' < hoge.txt | tr -d ']' | tr -d '[' > mod_hoge.txt
でおk(なはず)もしくは
tr ',' '\n' < hoge.txt | tr -d ']' | tr -d '[' > mod_hoge.txt
最後に改行を入れたいかどうかでちょっと違うだけ
最初に説明した tr "hoge" "foo" < hoge.txt 以外にも-dオプションを使っている
tr -d "[" < hoge.txt
で、[という文字を削除できる。trのデメリットは1文字での置換しかできない点。
例えば
tr '123' '456' < hoge.txt
と先ほどのデータに対して、置換をしてみると[4,5,6,4,5]が返ってくるはず。
つまり1を4に、2を5に、3を6にそれぞれ1文字置換してくれている。
複数文字に及ぶ文字列を置換するためにはsedを使うべし。
プロフィール
HN:coffee
職業:物理屋(自称)
趣味:映画鑑賞、登山
出身:大阪府の南の田舎
自己紹介:
import MyProfile
import coffee_pote from TWITTER
import amazonのほしい物リスト from WISH_LIST
print "先月子供が産まれました!"
# 最終更新 2022/10/25
職業:物理屋
趣味:映画鑑賞、登山
出身:大阪府の南の田舎
自己紹介:
import MyProfile
import coffee_pote from TWITTER
import amazonのほしい物リスト from WISH_LIST
print "先月子供が産まれました!"
# 最終更新 2022/10/25
カテゴリー
ブログ内検索
リンク
相互リンク募集中です
(Twitterにてお知らせください)
Demo scripts for gnuplot version 5 (gnuplotのさまざまなデモ画像と作り方がまとめられている、眺めているだけでできるようになった気分になれる)
gnuplotスクリプトの解説 (米澤進吾さんの個人ページ、gnuplotと言えばこのかた)
gnuplot のページ (Takeno Lab、うちのブログがリンクされていたのでリンク返し)
Twitterから映画の評価が分かる & 映画の鑑賞記録が残せる coco (映画の感想をまとめられるサイト、いつもお世話になっています)
Astronomy Picture of the Day Archive (天文や宇宙関連の最新の話題について画像とともにNASAが説明しているページ)
今日のほしぞら (任意の時刻の空で見える星を表示してくれる、国立天文台が管理している)
GNUPLOTとアニメーション (応用の項目の「見せてあげよう!ラピュタの雷を!!」あたりからすごすぎる)
読書メーター (読んだ本をリストできる便利なサイト)
flickr難民の写真置き場 (20XX年、flickrは有料化の炎に包まれた。あらゆるflickr無料ユーザーは絶滅したかに見えた。 しかし、tumblr移住民は死に絶えてはいなかった。)
教授でもできるMac OS X へのLaTeX, X11, gccのインストレーションと環境設定 (阪大の山中卓さんのwebページ、タイトルにセンスが溢れている、内容は超充実してる、特にTeX関連、学振DCとかPDの申請書類作成時にはお世話になっております)
英語論文執筆用の例文検索サービス (とんでもないものを見つけてしまった・・・・ arXivに収録されている 811,761報の 英語論文から,例文を検索するための検索エンジン)
Demo scripts for gnuplot version 5 (gnuplotのさまざまなデモ画像と作り方がまとめられている、眺めているだけでできるようになった気分になれる)
gnuplotスクリプトの解説 (米澤進吾さんの個人ページ、gnuplotと言えばこのかた)
gnuplot のページ (Takeno Lab、うちのブログがリンクされていたのでリンク返し)
Twitterから映画の評価が分かる & 映画の鑑賞記録が残せる coco (映画の感想をまとめられるサイト、いつもお世話になっています)
Astronomy Picture of the Day Archive (天文や宇宙関連の最新の話題について画像とともにNASAが説明しているページ)
今日のほしぞら (任意の時刻の空で見える星を表示してくれる、国立天文台が管理している)
GNUPLOTとアニメーション (応用の項目の「見せてあげよう!ラピュタの雷を!!」あたりからすごすぎる)
読書メーター (読んだ本をリストできる便利なサイト)
flickr難民の写真置き場 (20XX年、flickrは有料化の炎に包まれた。あらゆるflickr無料ユーザーは絶滅したかに見えた。 しかし、tumblr移住民は死に絶えてはいなかった。)
教授でもできるMac OS X へのLaTeX, X11, gccのインストレーションと環境設定 (阪大の山中卓さんのwebページ、タイトルにセンスが溢れている、内容は超充実してる、特にTeX関連、学振DCとかPDの申請書類作成時にはお世話になっております)
英語論文執筆用の例文検索サービス (とんでもないものを見つけてしまった・・・・ arXivに収録されている 811,761報の 英語論文から,例文を検索するための検索エンジン)
最新記事
(11/20)
(05/09)
(03/05)
(02/29)
(02/21)
(02/21)
(02/21)
(02/21)
(01/13)
(01/05)