Friday, December 11, 2015

シェルスクリプトで転置行列を出力する

突然ですが、シェルスクリプトで転置行列を出力する方法です。
元々の行列をinput.txtとします。
転置した出力をoutput.txtとします。

下準備1. 区切り文字の確認
less input.txt
でわかります。
大抵の行列ファイルはタブ区切りかカンマ区切りになっています。
下記例ではカンマの仮定でやっています。
タブの場合は「,」を「¥t」に置き換えてください

下準備2. 改行文字の確認
od -c input.txt
でわかります。
大抵¥nか¥r¥nです。
下記例では¥r¥nの仮定でやっています。
¥nの場合は「¥r¥n」を「¥n」に置き換えてください

下準備3. 列数(幅)の確認
csvファイルなら
head -n1 input.txt | tr ‘,’ ‘ ‘ | wc -w
タブ区切りなら
head -n1 input.txt | wc -w
でわかります。
この列数をMとおきます。
下記例ではM=1000としました。もちろん置き換えて使ってください。

ではスクリプトです。
for i in `seq 1 1000`; do cut -d”,” -f${i} input.txt | tr ‘¥r¥n’ ‘,’ >> output.txt; echo >> output.txt;done

C言語だともっと早い処理ができるのかもしれませんが、
僕はそういう技術がないので、専らシェルスクリプトを使っています。

No comments: