4つのプレーンテキストファイルを生成するプログラム(ターミナルで実行)があります。
例えば
./myprog
生成するfile1.dat
、、、、。file2.dat
file3.dat
file4.dat
myprog
この4つの「ファイル出力」を実行してロード(読み込み)できますが、実際のファイルに書き込むことはできない(おそらくファイルをメモリにロードすることもできる)スクリプトを作成したいと思います。可能ですか?
その理由は、このファイルが約70000個必要なため、追加ファイルを保存するのに時間を無駄にしたくないので、この情報だけを使用すればよいからです。
===============================================
コメントで具体的なケースを尋ねる
- 三角法ソフトウェア(Cで書かれた数値微積分学グリッドを生成するためのフリーソフトウェア)ファイルを読むには
mesh.poly
:
:
4 2 0 1
1 0 0 20
2 1 0 20
3 1 1 10
4 0 1 10
4 1
1 1 2 20 # bottom side
2 2 3 20 # right side
3 3 4 10 # top side
4 4 1 20 # left side
0
1
1 0.5 0.5 1 0.0005
- このコマンドは
triangle mesh.poly
次のファイルを生成します。
mesh.node
:
4 2 0 1
1 0 0 20
2 1 0 20
3 1 1 10
4 0 1 10
そしてmesh.ele
2 3 0
1 4 1 2
2 2 3 4
そして、他の2つのファイルで合計4つの出力ファイルがあります。
*.node
このファイルを作成したら、Fortranで作成した他のプログラムで必要な情報と情報を使用する必要があります*.ele
。私は.sh
これを自動化するためにファイルを書くつもりですが、Pythonや実行可能プログラムを実行できる任意の言語を使用できます。
読み込み(読み込み)mesh.node
がmesh.ele
簡単です。ただし、triangle
Fortranコードへの出力と入力で数千の物理ファイルを生成する必要があります。そのため、「ダミーファイルを書き込む」方法を探しています。これがより効率的で清潔になると思いました。
私の質問はい、70000x4の出力を生成する約70000個のファイルがありますmesh.poly
(最小数)。
答え1
aaを使用できます。メモリベースのファイルシステム(tmpfs)またはFIFO(名前付きパイプ)
ディストリビューションですでにtmpfs
サポートされているマウントポイントがどこかに設定されている可能性があります。すべての一時ファイルに使用できます。 (例:/tmp/
一部のシステムおよび構成では)
私のシステムでは、デフォルトでは/run/user/1000の下に十分な大きさのtmpfsがあり、これは指定した<300MiBに適しています。
マシンのルートは、どこかに新しいマシンをインストールして使用できます。
失敗:一般ユーザーとして4つの名前付きパイプを設定し、mkfifo
それを「一時記憶域」として使用できます。
これにより、アルゴリズムは次の疑似コード行を使用できます。
make_4_fifos_with_mkfifo
foreach polyfile in directory do
rename_fifos_to_use_given_prefix $polyfile
run triangle $polyfile
run fortranCMD polyfile.node $polyfile.ele ...
done
上記のコードは、システムで利用可能なさまざまなスクリプト言語のいずれかを使用して実装できます。あなたが快適だと感じるものを選択してください。
答え2
簡単です。 Perlまたはtclでスクリプトを書くことができます。以下はtclの例です。
set fp [open "somefile" r]
set file_data [read $fp]
close $fp
set data [split $file_data "\n"]
foreach line $data {
# do some line processing here
}
この例では、somefile はファイル名で、内容は file_data 変数にコピーされます。
より多くの情報を知りたい場合http://wiki.tcl.tk/367