体力,気力,ときどき知力

情報系大学院生 兼 HPC系ソフトウェアエンジニアのメモ書き.やったことを貼って後日にコピペ再現するために書いているので新規性・汎用性・芸術性は考えてません.数値計算,高精度演算,SIMD, vim, Linuxなど.

vimで複数ファイルを操作する

似たような(?)スクリプトvimで編集するケースを考えたい.

今回,自分が考えている状況は,グラフを作るgnuplotスクリプトが10種類くらいあって,各々output名とか軸ラベルは異なるけど,余白とかフォントとかは統一したい.余白を変えるのに10種類開いて変えたり,sed書いたりはめんどくさい.

 

前置きとして,まず複数ファイルをvimで開く

vim *.sh

または

vim a.sh b.sh c.sh

そうすると複数ファイルが開かれるので

:files

で一覧を見ることができる.おそらくa.cが最初に参照されているので

:n  次のファイルに進む

:N  前のファイルに戻る

3ctrl-^  3番目のファイルに移動する

で移動とかができる.

 

---[備考]---

最初に開くときに

vim -o a.sh b.sh

とやるとウインドウ分割で開く.縦に割りたいときは-Oで.

-----------------

 

 

開くのは良いとして,本題として全ファイルのhogeをfugaに置換する話.

まずはどのファイルを対象にするのか

:args *.sh

どのファイルが対象になったか確認するには

:args

今回であればa.sh b.sh c.shが出るはず.

これに対して一括置換をやりたければ

:argdo %s/hoge/fuga/g | update

こんな感じ.別に置換じゃなくても実行出来ます.

 

参考URLは以下のとおり.

http://zx.jpn.org/b/20081025/155/vim/vim-mluti-file-replace

nfsのキャッシュをローカルHDDに取る

うちはnfsを使ってhomeフォルダを各ユーザごとにマウントすることで,マシンが変わっても環境が変わらないようにしているんだけど,いろんな人が同時に触るとちょっと回線に負荷がかかって困る.

そこで,各マシンのローカルHDDにキャッシュを取ることにした.

 

使ったのはcachefilesdなるもの.取り敢えずfedora16に入れた.

CentOSとfedora16,18でyumで入れられることは確認済

 

1.ソフトのインストール

yum install -y cachefilesd

 

2.configの編集 (dirは/home/hpcl以下"以外"で.2-4はお好みで.)

vim /etc/cachefilesd.conf

1) dir キャッシュの作成先(dfコマンドでディスク使用量を確認するとよい)

2) brun 空き容量がこれ以上なら通常動作

3) bcull 空き容量がこれ以下ならキャッシュを間引く

4) bstop 空き容量がこれ以下ならキャッシュをやめる

 

3.サーバ接続設定にオプションを追加

vim /etc/fstab

 

nfsの行にfscオプションを追記

例:192.168.1.1:/home nfs auto,fsc,soft 0 0

 

4.ソフトの起動

chkconfig cachefilesd on

service cachefilesd start

 

5.再起動

 

6.確認

1)キャッシュの作成先を辿って行くと@04みたいなファイルがある

2) cat /proc/fs/nfsfs/volumesのFSCがyesになっている

 

(1),(2)がOKなら問題なし!

ログアウト後もジョブを継続する

sshでジョブを実行中にうっかり抜けたり,ネットワークが不調になっても大丈夫なように,ログアウト後もジョブを継続するようにした.

 

nohupコマンドで何とか出来るらしい.

 

nohup sh ./abc.sh &

 

こうやるとログアウト後でも平気.

だけど標準出力が変な所($HOME/nohup.out)に吐かれるという仕様なので,

 

nohup sh ./abc.sh > a.log & 

 

とかやっておけばOK.

Linuxのワイルドカードがわからない.だれか教えて...

Linuxワイルドカードを一応まとめると,
* 文字列

? 1文字

[a-z] 英語1文字

[1-9] 数字1文字

 

なんだけど,1.txt~20.txtを結合したいときに,

cat *.txt > result.txt

とかやると,順番的には

1 10 11 12 13 14 15 16 17 18 19 2 20 3 4 5 6 7 8 9

っていう順番で結合されてしまう.

forとかで回せばいいと思うんだけど,何かワイルドカードの並び順を制御する方法はないんだろうか.

 

だれか教えてーーー

いつか使ってみたい.タイル型ウインドウマネージャ

なかなか忙しくてネタが集まらない日々.

取り敢えず今日はメモだけ.

タイル型ウインドウマネージャっていうのはウインドウマネージャって名前がついてるけど,実際はほぼGUIすべてを取り仕切っている.っていうかGUI

僕が入れたことあるのはXmonadだが,Fedoraのログイン画面にXmonadって出てきてgnome3じゃない画面が出てきて混乱する自体が発生して涙目.

Xmonad自体はyumでインストールできる.

 

Linuxはデスクトップにしか無いし,ノートPCはWindows+cygwinなので,なんか面白いの無いかなーとか思って探してたらWIndows用のタイル型ウインドウマネージャを発見.

https://github.com/Tzbob/python-windows-tiler

使い方は以下を参考.

http://d.hatena.ne.jp/uhiaha888/20121125/1353824257

 

Xmonadは混乱したけど,こっちを今度入れて少し慣れてみようかとか思っている所存

Linux テキストファイル 列結合

後輩に今日聞かれたので書いておく.

自分の環境でありがちな実験データとかで

hoge1.txt >>

name1 size1 time1 

name2 size2 time2

hoge2.txt >>

name1 size1 time3

name2 size2 time4

 

みたいになってる結果のファイルがたくさんあったり,1000行あったりする.

join使えばいいじゃん!って思うかもしれないけど,実際のところ列は10個位あるからtimeしか欲しくないとか,execelに持って行く時面倒だ!とか文句があるので,

 

awk '{print $2}' hoge1.txt > tmp1

awk '{print $2}' hoge2.txt > tmp2

paste tmp1 tmp2 > result

こうすれば

result.txt >>

time1 time3

time2 time4

とかになる.

 

シェルスクリプトでプログラムの計測とかをするために

研究室を見てると,みんなシェルスクリプトを書いてるみたいだけど,シェルスクリプトのfor文には2種類ある事を知らない人が多いみたい.

僕はあんまり機会がなくて(2)は使わないんだけど,有効なので紹介する.

 

(1)よくあるfor文

for ( (n=0 ; n<100 ; n++ ) )

do

echo cat $n.txt

done

 

(2)カウンタに文字式を使う

for文の中は上と同じものだったとして,

do

echo $n

done

for文の条件式をこのように書くと

 

$ for n in 1 2 3

>> 1 2 3 (本当は開業されるけど省略)

 

$ for n in $(ls | grep *.txt)

>> hoge.txt fuga.txt hige.txt

 

$for n in $(cat hoge.txt)

>> セパレータで区切られたhoge.txt内の文字列を出力

 

$for n in $(awk '{print$1}' hoge,txt)

>> セパレータで区切られたhoge.txt内の第一フィールドの文字列を出力

 

こんな感じ.知らない人は使って.