sedコマンドで設定ファイルに追記

sedコマンドで設定ファイルに指定した行に追記するときに使えそうなスクリプト

$cat script.sh
#バックアップ作成日
DATE=`date +"%Y%m%d"`

#バックアップの作成
cp -p /etc/postfix/main.cf /etc/postfix/main.cf.$DATE

#指定した文字列"#myhostname = virtual.domain.tld"の次の行に
#myhostname = hoge.domain.comを追記
sed -e "/#myhostname = virtual.domain.tld/a\myhostname = hoge.domain.com" /etc/postfix/main.cf.$DATE > /etc/postfix/main.cf

#差分確認
diff /etc/postfix/main.cf /etc/postfix/main.cf.$DATE

実行結果

$sudo ./script.sh
77d76
< myhostname = hoge.domain.com

【参考】
sed aコマンド、 iコマンドの動作(指定文字列の挿入、追加) 【Linuxコマンド】

シェルスクリプトで設定ファイルと関数ファイルのサンプル

バッチスクリプト

$ cat batch.sh
#!/bin/bash
CONF_FILE=conf.sh
FUNC_FILE=func.sh

if [ -e $CONF_FILE ]; then
. $CONF_FILE
else
 echo "$CONF_FILE not found."
 exit 1
fi

if [ -e $FUNC_FILE ]; then
. $FUNC_FILE
else
 echo "$FUNC_FILE not found."
 exit 1
fi

echo $TEST #設定ファイルのTEST変数の値が表示される
next  #入力待ちの関数の呼び出し

設定スクリプト

$ cat conf.sh  
#!/bin/bash
TEST="test"

関数スクリプト

$ cat func.sh #関数ファイル
#!/bin/bash
function next(){ 
echo "Next step(Enter):Abort(Ctrl+c)"
read
echo "next"
}

実行例

$ ./batch.sh 
test
Next step(Enter):Abort(Ctrl+c)

next

【Neo4j】複数のグラフを扱う方法、その後。

【Neo4j】複数のグラフを扱う方法
書いていたことをScala+Neo4j+AnormCypherで再現しました。
下の画像はNeo4jのビジュアライザーのキャプチャ画像です。
黄色のノードがスーパーノードでそれ以外が普通のノードです。

こんな感じで分ければなんとうかなりそう。
引き続き経過観察。

【Neo4j】複数のグラフを扱う方法 | How to treat several graphs in Neo4j database?

最近、NoSQLのグラフデータベース Neo4jを触りだしましたudonsinです。
グラフデータベースということで当然扱う対象はグラフになるのですが、
どうやら現在のNeo4jでは複数のグラフを扱う機能がないようです。

この複数のグラフを扱えないというのは、
Neo4jではデータベースに対して直接ノード(エッジ)を追加するため
どのグラフのノード(エッジ)なのかという情報が抜け落ち、
ひとつの大きなグラフにすべて追加している状態のことです。

イメージとしては、

のようにすべてノード(エッジ)がデータベースに直接乗っています。

複数のグラフを扱うためには、
下の図のようにノード(エッジ)層とデータベース層の間にグラフに相当する層が必要です。


そこで、擬似的に複数のグラフを扱うために、
ひとつのグラフに含まれるすべてのノードにエッジをもつノード(スーパーノード)を
用意して、どのノードがどのグラフに属するのかという情報をもたせます。

グラフG に属するスーパーノード s と繋がているノードは
グラフGに属するノードであることがわかり、
逆にスーパーノードからグラフGに属するノードを取得することができます。

ただ、この方法はノードがグラフに属するかは分かりますが、
エッジがグラフに属するかはトラバースしないとわからないため
エッジの参照を頻繁におこなう場合は向いていないと思われます。

そもそも他のグラフデータベースを検討することも視野に入りますが、
Cypherやグラフビジュアライゼーションが魅力的な点もあり
当面この方法で複数グラフを扱おうと思います。

別の方法として

  1. graphデータの参照場所を動的に変更
  2. graphデータを入れ替える
  3. ノードに属するグラフの属性を追加する

といったことも考えましたが、方法1はgraph.dbの参照先を動的に変更できない、
方法2はgraph.dbを入れ替えてもキャッシュが効いてるため反映されない、
方法3はノードに属するグラフの属性は計算量の点で却下となりました。

もっとよい方法をご存知の方がいらっしゃいましたら教えて下さいm(_ _)m