2016年1月4日月曜日

shellスクリプトを使ってデータ処理


今回、shellスクリプトを使って行うデータ処理は以下の通り

mae1.dat1~mae9000.dat1という9000個のファイルがあって、
mae*.dat1というファイルの中身が
------------------------
1gyome
id x y z

1   1.11  1.21  1.30
2   1.21  1.51  3.13
3   3.32  5.11  6.98
4   2.12  7.77  7.87
------------------------
を、4行目以下のデータの1列目と4列目だけを取り出して

------------------------
1   1.30
2   3.13
3   6.98
4   7.87
------------------------

名前をato00001.dat2~ato09000.dat2に変換するデータ処理である。


-------------------------------------------------------------------------------------------
#!/bin/sh                                                                                                                                                         
echo "datasyori script"   
b=mae     
c=ato
e=.dat1
h=.dat2
i=1                      

while [ $i -le 9000 ] 
do
if [ "$i" -lt 10 ]
    then
    num=0000${i}
    elif [ "$i" -lt 100 ]
    then
    num=000${i}
     elif [ "$i" -lt 1000 ]
    then
    num=00${i}
    else
    num=0${i}
    fi

f=${b}${i}${e}
g=${c}${num}${h}
echo "${f}"
awk 'NR>3 {print $1,$4}' ${f}>${g}
i=`expr $i + 1`
done
------------------------------------------------------------------------------------



shell scriptの中身を1つ1つ説明していくと、

-------------------------------------------------------------------------------------------
#!/bin/sh                    #!/bin/shはshellスクリプトを動かしはじめるために絶対必要。                                                                                                                              
echo "datasyori script"  echoで" "内の言葉をターミナルに表示させる。
b=mae    変数bにmaeを代入する 
c=ato     変数cにatoを代入する
e=.dat1                 変数eに.dat1を代入する
h=.dat2                 変数hに.dat2を代入する
i=1                        変数iに1を代入する

while [ $i -le 9000 ] while[] do ○○○ doneで○○○を[]内の条件になるまで繰り返す
         [ $i -le 9000 ]は、$iが9000以下という条件である。
         $iはiの数字である。
         後ろの方にi=`expr $i + 1`と書かれており、○○○を繰り返すたびに、
         iの数字が1増えていき、i=2,i=3・・・となる。
                                    A -le Bは、AはB以下であるという意味。
do
if [ "$i" -lt 10 ]   if[A] then ○○○ elif[B] then ××× else △△△ fi
                                   Aという条件の時は○○○ を行い、
           Aでなく、Bという条件の時、×××を行い、
                                   Aでも、Bでもない時、△△△を行う
         A -lt Bは、AはBより小さいという意味である。
    then
    num=0000${i}  i=2の時、変数numに00002を代入する。
    elif [ "$i" -lt 100 ]
    then
    num=000${i}
     elif [ "$i" -lt 1000 ]
    then
    num=00${i}
    else
    num=0${i}
    fi

f=${b}${i}${e}  変数fに変数bと変数iと変数eを結合したものを代入
         ここでは、変数fはmae*.dat1となる。
g=${c}${num}${h} ここでは、変数gはato*.dat2となる。
echo "${f}"                 ここでは、mae*.dat1をターミナルに書き出す
awk 'NR>3 {print $1,$4}' ${f}>${g} mae*.dat1の3行目以降の1列目と4列目を取り出したデー                タをato*.dat2として保存
i=`expr $i + 1` i=`expr $i + 1`はiに1を足すという意味である。
done
------------------------------------------------------------------------------------

shellスクリプトで変数を扱う時、注意が必要である。

-----------
sponsored link
-----------

変数iがあって、それを文字として扱いたいときは${i}、
足し算などができるように数字として扱いたいときは$iとする。
また、whileの[]内では$i、ifの[]内では"$i"としたらうまくデータ処理ができた。
なぜだかはわからない。

この変数の扱いが難しいから、僕はshellスクリプトが好きではない。

2015年12月9日水曜日

yahooメールの表示数を増やす方法(メール削除の効率を上げる)

yahooメールの表示数を増やす方法について

1.yahooメールのページで、右上あたりの"設定・その他"の部分をクリックする(ctrl+fで"設定"と書いてある場所を探す)

2."設定・その他"をクリックした後、"メールの設定"をクリックする。

3.1ページあたりの表示件数という項目が出るので、▼ボタンを押した後、表示したい件数をクリックする。その後、右上の保存ボタンをクリックする。(デフォルトは1ページの表示は25件だが、200件まで増やすことができる)


-----------
sponsored link
-----------

元々は自分は、yahooメールを削除する時、1ページ25件のメールをすべて選択して削除ボタンを押していた。しかし、その方法だと、何百とあるメールを消すのが大変である。上の方法で1ページに200件のメールを表示させると、削除効率が上がった。(実際には200件一気に削除しようとすると、削除処理するのに時間が少々かかる)

ある種類のyahooメールの削除の効率を上げる方法

1.上のようにyahooメールの表示数を200件にする。

2.右上のメールの検索窓で消したいメールに含まれる単語を検索する

3.ctrl+aでメールをすべて選択(もしくは上の方にある操作ボタンを押して表示中のメールをすべて選択をクリック)

4.上の方にある削除ボタンを押す(もしくはdelボタンを押す)


2015年8月6日木曜日

(図解)ubuntuで「@」や「+」などがキーボードで打てない時の対処法

初めてubuntuを使ってみた。
ubuntuでキー入力をすると、@や+が出てこない・・・

まあ、shift+2と押すと「@」が出てくるようになるのですが、どのようにキーを押せばいいか覚えるのもめんどくさいので、今まで通りのキーボード入力ができるように、ubuntuを日本語入力できるようにしましょう。(他のサイトでは図がなくてわかりにくかったので、図付きで説明してみる)


1, まず、下の図の①のダッシュホームをクリックします

2,次に下の図の②の部分にkeyと入力します。するとキーボードレイアウトが③のように表れるので、キーボードレイアウトをクリックします
(次の説明は下へスクロール)





























3,キーボードレイアウトをクリックした後、下図の④の+のところをクリックしてそこから日本語を選択してください

4,そうすると、下図の⑤の部分に英語(US)の下に日本語と出てきます。

5,最後に下図の⑥の部分のキーボードマークをクリックしてそこから日本語を選択してください。これで、日本語入力ができます。shift+2を押したら「"」になります。

6,下図の⑤の部分の日本語をマウスでドラッグして英語(US)の上に持っていって、下図の⑤の部分の表示を日本語、英語(US)の順番にすると、次ログインした時も日本語入力になってます。


































ちなみに上の図の下の方にあるキーボードは、英語(US)の時、キー入力すると、どのような文字が出るかを表しています。たとえば、キーボード2を見ると、@と書かれており、それがshift+2と押すと@と書かれることを意味しています。

-----------
sponsored link
-----------


キーワード:
Ubuntu 「@」 アットマーク キーボード 打てない
Ubuntu バックスラッシュ キーボード 打てない
Ubuntu 「+」 プラス キーボード 打てない
Ubuntu 「*」 アスタリスク キーボード 打てない
Ubuntu 「:」 コロン キーボード 打てない
Ubuntu {}[] 括弧 キーボード 打てない
Ubuntu 「=」 イコール キーボード 打てない
Ubuntu 「~」 チルダ キーボード 打てない
Ubuntu 「|」 パイプ キーボード 打てない
Ubuntu 「&」 アンド キーボード 打てない




ubuntuでsudo apt-get installができない時の対処法

自分としては初めてのubuntuである。
試行錯誤でいろいろとやっていた。

そして、ubuntuのターミナルでsudo apt-get install emacs と打っても
emacsがインストールできなかった。

ネットにつながっているのに関わらずである。

調べていくうちにsudo apt-get updateをしたらいいということがわかった。

sudo apt-get updateをした後に、sudo apt-get install emacsと打つと、
emacsをインストールできた




2015年8月5日水曜日

LAMMPSをシングルプロセッサで動かす

LAMMPSやLIGGGHTSをシングルプロセッサで動かす方法について以下に書き記す
(要は並列計算しないでLAMMPSでシミュレーションする方法についてである)

まず、LAMMPSやLIGGGHTSをダウンロードしたものとして話を進める

また、シングルプロセッサでシミュレーションをする時も、
mpirunというコマンドを使えるようにopenmpiをダウンロードしておくべきであるが、
ここでは、openmpiをもうダウンロードしたものとして話を進める。
(openmpiのダウンロードについてはいろんなサイトで詳しく書かれている)

-----------
sponsored link
-----------


1. cd ~/LAMMPS or LIGGGHTS-PUBLIC/src/MAKEでsrcディレクトリ内のMAKEディレクトリに入る
(versionにより違うかもしれないので、srcディレクトリを探して、その中にMAKEディレクトリがあるかを確認する)

2.lsをしてMakefile.serialファイルを探す。そして、中身を見てみる。すると、g++と書いてある

3.c++をg++で動かせるかを確認する。
(g++とターミナルで打ってno input filesやファイルが入力されてませんと出たらok
ただ、command not foundやコマンドが見つかりませんと出たらg++を使えるように
ダウンロードをする)

4.srcディレクトリに戻って、そこにSTUBSディレクトリがあることを確認する

5.srcディレクトリでmake serialとコマンドを打つと、文字がざざざざと出て、
lmp_serialというファイルがsrcディレクトリ内にできる。

6.STUBSディレクトリ内に入ってmakeと打つ。もしくは、srcディレクトリ内でmake stubsと打つ。
(自分の古いバージョンではmake stubsと打てばいいけど、他のバージョンでは、make mpi-stubs
と打つ必要がある。実は、LAMMPSのdocディレクトリ内にあるManual.pdf内に今までのこと書いてあるので、それを参考にした方がいい。pdf内でstubsと検索をして、その周辺の英文を読めばいい。)
(これを忘れるとシングルプロッセサでシミュレーションできない)

7.lmp_serialを自分がシミュレーションしたいディレクトリに移動させて、
そのディレクトリで mpirun -np 1 lmp_serial < in.なんとか
とコマンドを打つとシミュレーションができる、もしくは、in.なんとかの記述がおかしいとか
出たら成功である。
(ちなみに-np 1 はプロセッサ1つでシミュレーションするという意味である。)
(exampleディレクトリ内に様々なディレクトリがあり、その中にin.なんとかファイルがあるので、それを使ってシミュレーションをしてみればいい)

8.Make.serialファイルのファイル名をMake.fooと書き換えて、
ファイル内の# serial = RedHat Linux box, g++4, no MPI, no FFTs の部分を
# foo と書き直してsrcディレクトリでmake fooと打つと、lmp_foo ファイルができる。
それを使ってもシミュレーションができる。
(バージョンによってはできないかもしれない)

-----------
sponsored link
-----------




僕がシングルプロセッサでやる理由は、マルチプロセッサがないというのもあるが、
grainタイプのシミュレーションをマルチプロセッサで行うと不都合なことが
起きたからである。

マルチプロセッサは複数のプロセッサがあり、それぞれのプロセッサに粒子が入っているが、Aというプロセッサに入っている粒子とBというプロセッサに入っている粒子は互いに力を及ぼさないのである。(今はもう改善されているかもしれないけど)

そうすると、シミュレーション結果がむちゃくちゃな結果となってしまう。

grainタイプ以外にもそういう問題が起きるかもしれない。
マルチプロセッサで問題が起きるかどうかは、in.なんとかファイル内に
newton onという記述を入れて、newton onの部分でerrorが出れば、
マルチプロッセサでやるべきではない。

ちなみにnewton onはAというプロセッサ内にあるatomとBというプロセッサ内にある粒子の間の力の相互作用を計算するという意味である。



Paraviewでの球の表示の仕方

久しぶりにParaviewで球を表示しようと思って、検索してみたが、
どこのサイトにあったかわからなくなってた。

ということで、記憶の断片をたどって球を表示してみた。

-----------
sponsored link
-----------


1.Paraviewを起動
2.①のファイル選択より、開けたいvtkファイルを選択(①は下の図にある)
3.画面の左の方にあるApplyボタンを押す
4.②のボタンを押して、Glyphにする。
5.画面左下にある部分で、Scalarsでradius、Vectorsはi (関係ないかもしれないけど)、
Glyph TypeをSphere、Sphere枠内のRadiusを1.0にする。
そして、画面左下の部分で下にスクロールして、Scale Modeをscalar
Set Scale Factorを1.0にする(Editの部分をチェックしてからね)。
6.③のApplyボタンを押すと球が絵として表示される。
7.④で見る方向を変えてみる(お好みで)


2014年10月3日金曜日

C++の罠

自分が読んでる「はじめてのC++」には、
#include <iostream.h>
と書いてあったので、
自分のC++プログラムにもこう書いたら、
error: iostream.h: No such file or directory

というエラー表示が出た。

そして、ググると
上のような書き方だと古いことがわかった。

新しい書き方は下のようになるらしい。

#include <iostream>
using namespace std;


プログラミングって意外と
こういうところでつまづくんだよなー