2段階に分かれたCFDシミュレーションを実行したい。最初のステップが終了したら、テキストファイル(境界条件 - CFD用語に関連する)を変更し、さらにステップ2のケースを再実行する必要があります。複数行のテキストファイルをbashスクリプトで編集する
これまで手動で行っていましたが、シミュレーションを夜間および週末に実行する時間を短縮します。
したがって、bashスクリプトを使用してテキストファイルを編集することはできますか?
例:私のファイル構造 :
TestRun
Folder1に
- TextFile1
TestRun(メインフォルダ)のサブフォルダで構成され( Folder1)、Folder1にはbashスクリプトで編集するテキストファイル(TextFile1)があります。 (例えば)TextFile1の
内容:
internalField nonuniform List<scalar>
7
(
0
1
2
3
4
5
6
);
boundaryField
{
left
{
type fixedValue;
value uniform 1;
}
}
さて、bashのファイルのようにファイルを変更しなければならない。
internalField nonuniform List<scalar>
7
(
0
1
2
3
4
5
6
);
boundaryField
{
left
{
type groovyBC;
valueExpression "-pc";
variables "[email protected]=pc;";
value uniform 0;
}
}
行数を編集することに、注意してくださいより多くであります1よりも大きく、私は特定の行番号を知らない。私はsedを使って1つの特定の行番号を編集しているいくつかの投稿に出会った。
私の場合は、「左」の単語(vim:/ leftのように)を見つけて、検索した単語に続く「{}」の行を置き換える必要があります。 、
#!/bin/bash
#
insideleft='false'
while read line
do
# using grep -c to make sure it matches even if there are spaces
if [ $(echo $line | grep -c left) -eq 1 ]
then
insideleft='true'
cat <<HEREDOC
left
{
type groovyBC;
valueExpression "-pc";
variables "[email protected]=pc;";
value uniform 0;
}
HEREDOC
else
if [ $insideleft == 'false' ]
then
echo $line
else
if [ $(echo $line | grep -c '}') -eq 1 ]
then
insideleft='false'
fi
fi
fi
done <data
基本的には、「左」の行が見つかったら:ファイルのみで一度表示されます「左」という言葉を当たり前の撮影
"left"という単語のインスタンスは他にもありますか、それともそのコンテキストで一度だけ表示されると想定できますか? – Nic3500
@ Nic3500テキストファイル全体で1回だけ発生します。それは私の出力テキストファイルで肯定的です。言及を忘れてしまった! –
ありがとう、私はその後動作するスクリプトを投稿しました。 – Nic3500