Hatena::ブログ(Diary)

Weballergy このページをアンテナに追加 RSSフィード

2013-03-20 もう完全にはてなブログに移行します このエントリーを含むブックマーク このエントリーのブックマークコメント

markdownで記事が書けるのではてなブログの方を最早メインで使います。以上。

http://wrist.hatenablog.com/

2012-06-03

xargsにbashのfunctionを渡す方法

あっさりできるかと思ったら意外に時間が掛かってしまったので纏めておく。

ポイントは2点で、

  • export -f 関数名 しておく
  • xargsではbash -c "コマンド" を実行する

で行けた。

パスにそのbasenameした結果をTAB区切りで連結しただけの文字列をechoする関数を定義する。

$ function echo_with_basename(){
>  echo -e "$1\t`basename $1`" # -eオプションが無いと\tがTABに変換されない
> }

この関数を次のようにファイルリストを出力した結果をパイプで繋ぎxargsに渡す。

$ cat filelist.txt
/home/wrist/data/A00000.txt
/home/wrist/data/A00001.txt
/home/wrist/data/A00002.txt
/home/wrist/data/A00003.txt
/home/wrist/data/A00004.txt
$ cat filelist.txt | xargs -I % echo_with_basename % # "-I %"のオプションは引数を%で表すことを示す
xargs: echo_with_basename: そのようなファイルやディレクトリはありません

このようにそのようなファイルやディレクトリが無いと言われてしまう。

そこでexport -fした上で次のように実行する。

$ export -f echo_with_basename
$ cat filelist.txt | xargs -I % echo_with_basename %
xargs: echo_with_basename: そのようなファイルやディレクトリはありません

またしても同じ事を言われてしまう。これを防ぐためには、次のように実行する。

$ cat filelist.txt | xargs -I % bash -c "echo_with_basename %"
/home/wrist/data/A00000.txt     A00000.txt
/home/wrist/data/A00001.txt     A00001.txt
/home/wrist/data/A00002.txt     A00002.txt
/home/wrist/data/A00003.txt     A00003.txt
/home/wrist/data/A00004.txt     A00004.txt

これで所望の結果が得られた。

なおインタラクティブシェルだけでなくスクリプトとして実行する際もexport -fした上で同様に利用することができる。

参考

http://stackoverflow.com/questions/3321738/shell-scripting-using-xargs-to-execute-parallel-instances-of-a-shell-function

http://www.webzoit.net/hp/it/internet/homepage/env/cs/server/os/type/unix/linux/shell/kind/sh_bash/function2/

http://stackoverflow.com/questions/979453/how-can-i-use-aliased-commands-with-xargs

はてなブログとの使い分け

一つ前のエントリではてなブログに移行すると書きましたが技術ブログと日記的なものを分けて書いて行きたいと思ったので

前言を撤回して今後そういう使い分けをして行きます。

はてなダイアリーの方が将来サービスを停止したらその時はwordpressにでも移行します。

あとあんまり関係ないのですがこの4月から社会人になりました。

名古屋から大阪に移ったので大阪界隈の方々はどうぞ宜しくお願い致します。

2011-11-27

2011-01-14

2010-11-04

SRILMインストール

言語モデル構築に用いられるSRILM(1.5.11)をmacbook pro(Snow Leopard)と

研究室のサーバ(Red Hat Enterprise Linux ES release 4 (Nahant Update 7))にインストールしたのでそのメモ.

必要条件

gcc(3.4.3以降)

インストール

以下のサイトから必要な情報を記入しソースをダウンロード

http://www-speech.sri.com/projects/srilm/download.html

解凍・展開
mkdir srilm
tar zxvf srilm.tgz -C srilm
コンパイル

環境変数SRILMにSRILMを展開したディレクトリをセットしmake World

cd srilm
setenv SRILM `pwd` (cshの場合)
make World

コンパイル時にtcl.hが無いと怒られる場合はTCL_INCLUDE及びTCL_LIBRARYに正しいパスを設定してmakeするか,

make Worldを以下のようにTCL_INCLUDE,TCL_LIBRARYを空にし,NO_TCL=Xを指定してmakeを実行

make TCL_INCLUDE="" TCL_LIBRARY="" NO_TCL=X World

テスト
make test
完成

$SRILM/bin/$MACHINE_TYPEと$SRILM/binをPATHに,

$SRILM/manをMANPATHに追加する,もしくはそれらを適当な所に配置するなどしておく.

使い方等については今後追記して行く予定.

参考

http://www-speech.sri.com/projects/srilm/docs/INSTALL

(ダウンロードした最上位ディレクトリのINSTALLと同じ文書)