GNU grep 2.25 で、pat1またはpat2の検索 $ grep '¥(pat1¥|pat2¥)' file .frcmodで終わる検索 $ grep '¥.frcmod$' file GNU emacs24.5.1 で、pat1またはpat2の検索 M-x query-replace-regexp や M-x occur で、条件は ¥(pat1¥|pat2¥)
grep | egrep | emacs | python | |
[...], ^, $ | v | v | v | v |
\<...\>, \b, \B | v | v | v | v |
グループ化 | \(...\) | (...) | \(...\) | \(...\) |
(...)* | v | v | v | v |
+ or \+ | \+ | + | + | + |
? or \? | \? | ? | ? | ? |
{...} or \{...\} 反復回数 | \{...\} | {...} | ・ | ・ |
\ or \| | \| | | | \| | \| |
$ grep 'grid.\+coord' *.[chly]
ソフトウェアを利用するための環境や、同じソフトウェアでもバージョンを切り替えて利用できる環境を 用意したり、削除したりするツールである。それぞれのソフトウェア・バージョンはモジュールと呼ばれる。 モジュール名(モジュールファイル)で指定された、変数や環境変数がセットされて環境が用意される。 module load モジュール名 #モジュールのロード(読み込み) module unload モジュール名 #モジュールをアンロード module list #ロードしているモジュールの一覧を表示 module avail #利用可能なモジュールを表示 シェルスクリプト内でこのツールを利用するときには、 source /etc/profile.d/modules.sh などを予め読み込んでおくらしい。[ref] https://qiita.com/Ag_smith/items/f268ad27165a60aecd35 その他詳細はこちら。
ファイルhoge1.outとhoge2.outの中に以下のような数値が出力されている。出力されている順番に、差を求めたい。 hoge1.out ... Frequencies -- -500.7208 -500.7202 58.3287 ... Frequencies -- 70.2251 104.3229 172.1244 ... Frequencies -- 172.1303 241.4551 248.0223 ... hoge2.out ... Frequencies -- -500.4196 -500.4196 58.2761 ... Frequencies -- 70.1453 104.2697 173.3204 ... Frequencies -- 173.3204 241.3123 248.0306 ... $ paste <(grep "Frequencies" hoge1.out | awk '{print $3,$4,$5}' | tr ' ' '\n') \ <(grep "Frequencies" hoge2.out | awk '{print $3,$4,$5}' | tr ' ' '\n') \ | sed 's/\t/\t-\t/' > temp $ paste temp <(bc < temp) とすると、 -500.7208 - -500.4196 -.3012 -500.7202 - -500.4196 -.3006 58.3287 - 58.2761 .0526 70.2251 - 70.1453 .0798 104.3229 - 104.2697 .0532 172.1244 - 173.3204 -1.1960 172.1303 - 173.3204 -1.1901 241.4551 - 241.3123 .1428 248.0223 - 248.0306 -.0083 ... と計算できる。各行は、hoge1.outの値、マイナス、hoge2.outの値、その計算結果である。
hoge1.outがあったとする。 ... Frequencies -- -500.7208 -500.7202 58.3287 ... Frequencies -- 70.2251 104.3229 172.1244 ... Frequencies -- 172.1303 241.4551 248.0223 ... 次のように " Frequencies --"から始まる行にマッチしたら、$3~$NFまでのフィールドを ひとつずつprintするとよい(NFはその行のフィールド数) $ awk '/^ Frequencies --/ {for(i=3;i<=NF;i++) print $i}' hoge1.out -500.7208 -500.7202 58.3287 ...
$ grep GB$ hoge.out | sed 's/^.*://' | sed 's/GB//' | sed -z 's/\n\(.\)/\+\1/g' | bc
hoge.outとして次のような出力が含まれるとき、上のワンライナーで GBの数字の和を求められる。
... item1: 1.1GB ... item2: 0.1GB ... itemN: 1.1GB ...
[補足] 最後の sedの -zオプションは行分割を NULLにし、\nを検索対象にするために必要である。 gも必要である(行分割をNULLにしたので1行はデータの末尾までになるため)。
cat hoge.out | sed -n '/GB$/{s/^.*: *//; s/ *GB//; H;}; ${g; s/\n//; s/\n/+/g; p}' | bc GB$の行を見つけたら行頭の "itemn: "のところを削除し、" *GB"を削除し、sedのホールドスペースに追加する。 最後の行の処理を終えたら ホールドスペースの内容をパターンスペースにコピーし、先頭の改行を削除してから、 改行を+に置き換えて、出力し、bcで計算する。
入力は行ごとにパターンスペースに入れられ(末尾の改行は削除される)、コマンド処理後に、 出力される(改行は追加される)。一時的な保存場所であるホールドスペース(初期値は空)を 利用できる。-nオプション付きの場合、下記のpコマンドで出力しない限り何も出力されない。
コマンド s/検索文字列/置換後文字列/オプション 文字列の置換(パターンスーペース内) オプション g 置換を最後まで行う(g無いときは1回だけ行う) 検索文字列 . 任意の文字 * 直前の文字の0個以上の繰り返し(.*で任意の文字列) ^ 行頭 $ 行末 \(...\) 括弧でくくった部分は、置換後文字列として\1,\2,...で使用できる \| または d 削除(パターンスーペース内) p 出力する(パターンスメース内)、sed -n で実行した時にこの出力だけ得られる G ホールドスペースの内容をパターンスペースに追加(追加の前に改行が追加される) h パターンスペースの内容をホールドスペースにコピー g ホールドスペースの内容をパターンスペースにコピー H パターンスペースの内容をホールドスペースに追加(追加の前に改行が追加される) N 次の入力行をパターンスペースに追加 b [label] labelに分岐する。labelが無ければ末尾に分岐。 = 行番号を出力する(改行つき) 上記コマンドの前には対象を指定できる /検索文字列/[!] 検索文字列を含む行を対象、!がある場合は否定の意味 行番号[,行番号][!] 入力の行番号(から行番号)の行を対象、!がある場合は否定の意味、 $は最終行の行番号 ;で区切ってコマンドを複数書ける。 {}でコマンドをくくって複数書ける。
例) sed -n '/GB/p' hogefile #これは grep GB hogefile と同じ結果 sed -n '1,2p; /GB/{s/pot/Pot/; s/:/=\t/; p}' sed -n '1,2{=; p}; /GB/{s/0/a/; N; N; =; p}'
E表現の数値を小数点以下4桁に切り捨てる例) sed 's/\(-\?[0-9]\.\|-\?\.\)\([0-9]\{4\}\)\([0-9]*\)\([eEdD][+-]\?[0-9]\{2\}\)/\1\2\4/g' filename sed -r 's/(-?[0-9]\.|-?\.)([0-9]{4})([0-9]*)([eEdD][+-]?[0-9]{2})/\1\2\4/g' filename
[ref] https://qiita.com/gin_135/items/773fec1343a69c9f90d6
man sed も見よ
\(, \), \{, \}, \? などは (, ), {, }, ? などと表記する。 その他に使える表現が増える。
リンク・マニュアル
例
$ tree --charset=C -I '*.pdb|*.gro|OUT.*|chignolin.*|genion.*|*~|*.cpt|*.edr|*.xtc|*.tpr|*.mdp|*.trr|*.top|*.o???[0-9]|min.log' ¥ | less > temp
X11, X, X Window System, 環境変数DISPLAY, ssh -Y などに関する背景はこちらを読め
コマンド
xen : keycodeなどがわかる xmodmap : 設定されている modifyer keyがわかる xmodmap -pke : キー設定のリスト表示
$ ssh hostname として @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! になったとき、いったん $ ssh-keygen -R hostname としてから、もしくはsshがサジェストしたコマンドを実行してから、ssh接続する。 IPアドレスについても同様に削除するとよい。
$ diff -r hogehoge1 hogehoge2
$ find . -newer hogehoge -print
(HOGEDIRの部分は . など)
(参考) find $HOGEDIR -path '*\.trj' (参考) find $HOGEDIR -path '*\.trj' -printf "%p\t%s\n" | awk '{print $1 "\t" $2/1000/1000/1000 " GB"}' #ファイルサイズも表示 find $HOGEDIR -path '*\.trj' -printf "%p\t%s\n" | awk '{sum+=$2; print $1 "\t" $2/1000/1000/1000 " GB"} END{print sum/1000/1000/1000 " GB"}' #合計サイズも求める (参考) find $HOGEDIR -path '*\.trj' -printf "%p\t%s\n" | awk '{sum+=$2} END{print sum/1000/1000/1000 " GB"}' #合計サイズだけ求める
find $HOGEDIR -path '*\.trj' -delete 例えば、いくつかの拡張子のファイルを一気に削除する場合 find $HOGEDIR -path '*\.trj' -delete; find $HOGEDIR -path '*\.rst' -delete; find $HOGEDIR -path '*\.nuc' -delete; find $HOGEDIR -path '*\.vtk' -delete; find $HOGEDIR -path '*\.vti' -delete;
$HOGEDIRディレクトリの階層以下で、ファイルの末尾が .trjであるファイルのリストに対して、それぞれ個別に ls -1をする。 # {}はヒットしたパス名に置き換わる、\;は -execオプションの末尾として ;を与えるためにシェルのメタキャラをエスケープしている部分。 (参考) find $HOGEDIR -path '*\.trj' -exec ls -1 {} \;
# Find and then delete all files under current directory (.) that: # 1. contains cmake (case-&insensitive) in it's path (wholename) # 2. name is not CMakeLists.txt find . -iwholename '*cmake*' -not -name CMakeLists.txt -delete
find Adir -maxdepth 1 ! -regex '.*ABC.*' -type f -exec echo cp -ip {} Bdir/ \;
Adirディレクトリにある、ABC文字列を含むファイル名以外を、Bdirにコピーする。 なお、ディレクトリ名にABCが入っていてはダメ。。。?
削除は確認後にすべし。 find . -path '*/\._*' -delete find . -path '*/\.AppleDouble' -exec /bin/rm -rf {} \; find . -path '*/\.DS_Store' -delete
$ dig -x 133.60.113.208 +short #ホスト名だけ出力 orange.eit.hirosaki-u.ac.jp. $ dig +noall +answer -x 133.60.113.208 #タイトル無しで、answer sectionだけ出力 208.113.60.133.in-addr.arpa. 3600 IN PTR orange.eit.hirosaki-u.ac.jp.
プログラムは -g つきでコンパイルしておく。
gdb a.out > run #走らせる
gdb a.out > break file.c:216 #ブレークポイントを設置 > run -text input.rst input.rst-text #走らせる(a.outに与える引数付き)
https://www.ois-yokohama.co.jp/oisblog2018/archives/3195
http://www.fos.kuis.kyoto-u.ac.jp/le2soft/siryo-html/node49.html
https://www.tohoho-web.com/ex/draft/gdb.htm
などを見よ
http://antibayesian.hateblo.jp/entry/2014/09/15/162605
1ライナーで統計処理あり。なお、Linux上ではbashのメタキャラが展開されるので " は ' としなければならない。 awkインタプリタなので、実行はすごく遅い。 (例) 度数分布。binは幅 awk 'BEGIN{ bin=1.0 } { f[ int($1/bin) ]++ } END{ for( i in f ) print i*bin, f[i] }' < data.txt
bc -ls とする
bc -l とすること(オプション -l)で、標準的な数学関数が使えるようになる
s (x) The sine of x, x is in radians. c (x) The cosine of x, x is in radians. a (x) The arctangent of x, arctangent returns radians. l (x) The natural logarithm of x. e (x) The exponential function of raising e to the value x. j (n,x) The bessel function of integer order n of x.
例1) log_2 (x)
define lg(x) { return (l(x) / l(2)); }
例2) 二点間の距離
define dist (x,y,z,u,v,w) { return sqrt((x-u)*(x-u)+(y-v)*(y-v)+(z-w)*(z-w)); }
例3) 羃乗
define pow (x,y) { auto k, ans; ans=1; for ( k=0; k<y; k++ ) { ans = ans*x; } return ans; }
その他は man bc を参照のこと
平方根は sqrt( )
1.23e-4とかの表現は可能か?
topコマンドで覚えておきたい使い方14個 [#x0821353]
while true; do for i in 1 2 3 4; do ssh compute-0-$i "hostname; top -b -n 1 | sed '2,6d' | head -7" done echo ------------------------------------------------------------------------------- sleep 5 done
ps uxa --forest ps ux --forest ps u $$ ps u -C cmd
オプション・引数
u ユーザ指向のフォーマットで表示 x 自分の全てのプロセス xa 全てのプロセス -C cmd コマンド名で指定 --forest ASCIIアートで階層表示 $$ シェル自身のPIDを指定してそれだけ表示
<defunct>マーク
プロセスはゾンビであることを示す。親プロセスによって正しく消去されていないために残っている。親プロセスが終了するとinitによって消去される。
プロセスの状態コード
D 割り込み不可能なスリープ状態(通常I/O中) R 実行中又は実行可能状態 S 割り込み可能なスリープ状態 T ジョブ制御シグナルまたはトレースされているために停止中の状態 Z ゾンビプロセス
Fカラム(プロセスフラグ)
次の値の合計 1 fork された(execは含まず) 4 スーパーユーザー権限を使っている
VSZとRSS
VSZ: プロセスの仮想メモリサイズ(未割当の領域を含むサイズ) RSS: プロセスの常駐メモリサイズ(他のプロセスと共有している領域も含む) サイズはいずれも KiB (2014-byte units)
[補足] 未割当の領域=プロセスが確保したがまだ使用されていなく、物理的に割り当てられていない領域。 その後、使用されると物理的に確保される(このときシステムに残りが無いと判ったらOOMでkillされる)。
man ps を参照のこと
$ rsync -av -e ssh --delete EPG username@machine:/disk1
EPGディレクトリを、/disk1ディレクトリ内にrsyncする。
(危険注意) EPG ではなく、EPG/ とすると、disk1の中にEPGディレクトリが出来るのではなく、 元のdisk1が丸ごと削除(disk1に他のファイル・ディレクトリがあるとそれは削除)されて、 disk1の内容がEPGになるので非常に危ない。
各オプションの意味
-a equivalent to -rlptgoD -v increase verbosity -e specify the remote shell to use --delete delete files that don't exist on the sending side -r recurse into directories -l copy symlinks as symlinks -p preserve permissions -t preserve times -g preserve group -o preserve owner (root only) -D preserve devices (root only)
rootで作業する(ファイルのパーミッションを保つため。一般ユーザの場合そのユーザー所有に変更される)
# find DIRECTORY | cpio -vo > FILE.cpio #コピーアウトモードと呼ばれる -v は表示
rootで作業する(アーカイブFILE.cpioにファイルが絶対パスで収められていたらそこに書き込まれるめ。 相対パスならカレントディレクトリから相対的に書き込まれる。変更のコントロールは出来ない?)
# cpio -vidmu < FILE.cpio #コピーインモードと呼ばれる -v は表示 -d はディレクトリが無ければ作る -m は日付を保つ -u は上書きをする(付けない方が無難か)
$ cpio -tv < FILE.cpio