Cygwin X

Cygwinでgnuplotやxcrysdenを使うとき、毎回起動に時間がかかる&見た目のよろしくないxterm windowを表示するのを何とかならないかと思っていたところ、xtermを起動せずにX serverのみを立ち上げるコマンドを見つけた。
run xwin -multiwindow -noclipboard
これでwindowsがより使いやすくなった。

参考URL

時間の順序

トラジェクトリがちゃんと順番どおりになっているかの、クイックチェック。

$ grep time pos.xyz | awk ‘{$a=$3; sub(/.$/,””,$a); print $a}’ > time.txt
$ awk ‘NR==1{s0=$1 } NR!=1{r=$1-s0; s0=$1; if (r!=1) print $1, r}’ time.txt > test

1行目は、ステップ数のあとの,を消す操作をしている。
2行目は、前の行との差を取って、それが決まった差ではなかったら値を出力するようにしている。

データの2列目の平均

ネットで拾ってきたものだが、
データファイルの2列目のみを平均するスクリプト。
RubyでいうHashのような配列を使用している。
高度すぎて、フォローするのにちょっと時間かかった…

#!/bin/bash

awk '
NF>=2 {
  sum[$1]+=$2;num[$1]++;
} END {
  for(n in sum){
    if ( num[n] > 0 ) {
      print n, sum[n]/num[n];
    }
  }
}' "$@" | sort -k1,1g

列の生成

ファイルの行数を読み取って行数だけ計算を行うプログラムを
書こうとしたが、NUMを数値だと認識してもらえず、
NUMを超えても延々と走ってしまう(危険!)

#!/bin/bash

NUM=`wc dipole.txt | awk '{print $1}'`
echo $NUM

for ((i=0;i<${NUM};i++)); do
echo `expr $i \* 4` >> time.txt
done

forループを使うのはやめて、awkを使ってみることにした。
awk ‘{print NR*4, $3*$4}’ dippolx.txt > t-ma.txt
列の掛け算くらいだったら、こちらの方が簡単。

paste -s

テキストファイルから情報を抜き出してx, yのテキストデータを作りたいのだが、
>> のように行を追加するコマンドはあっても

x

というファイルに y を追加して

x y

というファイルを作るコマンドはない…?

仕方ないので、

x
y

というファイルxy.txtを

paste -s xy.txt

で2列のファイルにする。これを繰り返して

x1 y1
x2 y2
x3 y3

とデータを追加していく。中間ファイルができてしまうのが気持ち悪い…

数値の取り出しと演算

ファイル中一番最後の原子のz座標を取り出して足し算したいとき。
awkなら読み取った数値(本来は文字列)を自動的に浮動小数点として扱ってくれる。
ただし、表示桁数が少ないので、OFMTを使って増やす。

tail -1 dum.xsf | awk '{ OFMT = "%.8f"} {print $NF+5.95907033}'