Zonuの雑記帳。1週間に1回更新が目標です。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ネタが無いので適当に書きます.
データファイルから特定の値を抜き出したいときに,grepと sedが便利です.
GNU SOFTWAREなので,UNIX/Linuxには標準で,Windowsの人はCygwinを入れれば使えます.
作業のイメージは,上のような3次元グラフの,ある断面をカットしたような2次元グラフを作成する,というようなものです.


今回は,下のようなデータファイル(X座標,Y座標,温度)からX=2.00の部分だけを抜き出しました.
---
0.00 0.00 100.00
0.10 0.00 20.00
0.20 0.00 20.00
0.30 0.00 20.00
0.40 0.00 20.00
0.50 0.00 20.00
0.60 0.00 20.00
0.70 0.00 20.00
0.80 0.00 20.00
0.90 0.00 20.00
1.00 0.00 20.00
1.10 0.00 20.00
10.00 0.00 20.00
0.00 1000.00 100.00
0.10 1000.00 71.51
0.20 1000.00 48.35
0.30 1000.00 33.08
0.40 1000.00 24.94
0.50 1000.00 21.52
0.60 1000.00 20.39
0.70 1000.00 20.08
0.80 1000.00 20.02
0.90 1000.00 20.00
1.00 1000.00 20.00
1.10 1000.00 20.00
10.00 1000.00 20.00
・・・以下Y=10,000まで1,000刻みで続く
----
まずgrepの正規表現検索を使用して,X=2.00の列を抜き出します.
$ grep '^ *2.00' filename
^は行頭を,*は一つ前の文字セットを繰り返す正規表現なので,これは,
行頭からスペースが続いた後に,2.00が記述されている列を意味しています.
次に,こうして出力されたX=2.00の列から,gnuplotのplot命令で2次元グラフが書けるように,X座標の列を消去します.
$ sed 's/^ *2.00//'
sedの 's/regA/regB/'は正規表現文字列regAをregBに変換します.
以上の二つをパイプでつなげ,適当なファイルにリダイレクトして完了!
$ grep '^ *2.00' foo.dat | sed 's/^ *2.00//' > hoge.dat
リダイレクトのときの注意点は,絶対に入力ファイルに書き込まないことです.
まあ,データファイルが1個程度なら手動でもいいんですが,100個とか1000個とかあると,手動では無理なので,シェルスクリプトと上のコマンドを組み合わせて自動的に抽出していきます.
データファイルから特定の値を抜き出したいときに,grepと sedが便利です.
GNU SOFTWAREなので,UNIX/Linuxには標準で,Windowsの人はCygwinを入れれば使えます.
作業のイメージは,上のような3次元グラフの,ある断面をカットしたような2次元グラフを作成する,というようなものです.
今回は,下のようなデータファイル(X座標,Y座標,温度)からX=2.00の部分だけを抜き出しました.
---
0.00 0.00 100.00
0.10 0.00 20.00
0.20 0.00 20.00
0.30 0.00 20.00
0.40 0.00 20.00
0.50 0.00 20.00
0.60 0.00 20.00
0.70 0.00 20.00
0.80 0.00 20.00
0.90 0.00 20.00
1.00 0.00 20.00
1.10 0.00 20.00
10.00 0.00 20.00
0.00 1000.00 100.00
0.10 1000.00 71.51
0.20 1000.00 48.35
0.30 1000.00 33.08
0.40 1000.00 24.94
0.50 1000.00 21.52
0.60 1000.00 20.39
0.70 1000.00 20.08
0.80 1000.00 20.02
0.90 1000.00 20.00
1.00 1000.00 20.00
1.10 1000.00 20.00
10.00 1000.00 20.00
・・・以下Y=10,000まで1,000刻みで続く
----
まずgrepの正規表現検索を使用して,X=2.00の列を抜き出します.
$ grep '^ *2.00' filename
^は行頭を,*は一つ前の文字セットを繰り返す正規表現なので,これは,
行頭からスペースが続いた後に,2.00が記述されている列を意味しています.
次に,こうして出力されたX=2.00の列から,gnuplotのplot命令で2次元グラフが書けるように,X座標の列を消去します.
$ sed 's/^ *2.00//'
sedの 's/regA/regB/'は正規表現文字列regAをregBに変換します.
以上の二つをパイプでつなげ,適当なファイルにリダイレクトして完了!
$ grep '^ *2.00' foo.dat | sed 's/^ *2.00//' > hoge.dat
リダイレクトのときの注意点は,絶対に入力ファイルに書き込まないことです.
まあ,データファイルが1個程度なら手動でもいいんですが,100個とか1000個とかあると,手動では無理なので,シェルスクリプトと上のコマンドを組み合わせて自動的に抽出していきます.
PR
この記事にコメントする
カレンダー
05 | 2025/06 | 07 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Internal Search
Category
About
name: Zonu
mail: pico@any.xii.jp
mail: pico@any.xii.jp
某地方国立大学院生。 歯車とか電子回路とかを見るとワクワクする、いわゆるメカフェチ。( not ロボオタ )
情報系学科だったはずなのに、気づけば環境系学科に。 お蔭様で、就職活動の際は説明が大変でした。 (でもその話題をツカミにできたので結果オーライかも)解析メインの研究なので、 FortranとかC++とかをメインにPythonとかOpenGLとかも使ってます。