linuxで使うテキストデータ変換用コマンド

実験データの処理に有用なlinuxコマンドを書いておきます。

私がよく使っているものは、

paste, sed, awk, perl

の4つです。

右に行くほど複雑な処理ができます。

pasteは入力されたテキストの各行を結合して出力します。

そのため二回に分けて測定されたデータを併せるときに便利です。

-dオプションで区切り文字を指定できます。

例:

a.txtとb.txtの各行をスペース区切りで結合しc.txtに出力します。

$ paste -d ” ” a.txt b.txt > c.txt

a.txt


h cnt

0.30 250

0.31 200


b.txt


h cnt

0.30 240

0.31 210


c.txt


h cnt h cnt

0.30 250 0.30 240

0.31 200 0.31 210


sedはストリームエディタです。私は主に置換するときに使います。正規表現を知っていれば、便利に使えるでしょう。

例:foo.txtに含まれる復帰文字を消す。すなわち改行コードをwin仕様からunix仕様にする。

sed ‘s/\r//’ foo.txt > bar.txt

フォルダに含まれるすべてのdatファイルの拡張子をgpdへ変換する。jに代入せずとも直接書き込むのもcoolです。

for i in *.dat; do j=echo $i|sed 's/dat/gpd/';mv $i $j; done

awkはレコードデータの処理に向いたスクリプト言語です。ファイルを与えると、一行ずつ読み込んでレコードに分解するところまで自動でやってくれます。使いこなしたい気になったらプログラミング言語awkを一冊買ってくるといいでしょう。

さきほどのpasteと組み合わせて使えば便利です。

例:a.txt,b.txtを結合し、各行でcntの和をとる。

$ paste -d ” ” a.txt b.txt | awk ‘{print $1,$2+$4}’ > d.txt

d.txt


h 0

0.30 490

0.31 410


$ awk ‘NR>4{print $1,$2+$4} NR<5{print}’foo.txt

などとすれば、ヘッダを残して処理させることもできます。

また、sqrt($2+$4)などの関数も使えるので、エラーの計算も簡単です。

perlは文字列処理に優れたスクリプト言語です。以上のコマンドで実現しにくいことは、すべてこれでやっています。正規表現が強力です。同一の処理を実現するのにも多様な書き方ができます。ひとが書いたコードは読みにくいのが難点です。個人的にはほかのものと比べて自然言語に近い感じがします。使うならラクダ本を買うか、perldocを見るといいでしょう。

ひとつひとつきっちりした処理をさせるのが好きな人はpythonがおすすめです。書式の自由度が低いために、コードはよみやすいです。またpythonはコンソールから対話的に使えるので、コンソール電卓としてに使うのはありだと思います。

あとはrubyは今の流行のようです。側からみると、perlをオブジェクト指向用につくり直してpython風にした感じでしょうか。ネット上に転がっている最近のスクリプトリソースを活用するにはちょっとかじってみてもいいかなと私は思っているところです。

hope this help.

 

Amazonで最大1500ポイントがもらえる無料体験 [12/12まで]

現在Amazonでaudible(オーディブル)の無料体験キャンペーンが行われており、プライム会員なら最大3000ポイント、会員でない方でも最大1500ポイントがもらえます。

「花火」などの小説や、英語教材などから好きなものを選んで聴くだけですので、チェックしてみてはいかがでしょうか。

 

 こんな記事も読まれています

コメントを残す