1

ガウスを使用していくつかの計算を行っています。ガウス出力ファイルから、入力構造情報を抽出する必要があります。出力ファイルには、800 を超える構造座標が含まれています。私がこれまでに行ったことは、次のように、、およびコマンドのいくつかの組み合わせを使用して、すべての入力座標を収集するgrepことawkですsed

grep -A 7 "Input orientation:" test.log | grep -A 5 "C" | awk '/C/{print "structure number"}1' | sed '/--/d' > test.out

これは、grepすべての入力座標に役立ち、「構造番号」の行を挿入するのに役立ちました。これで、定期的に繰り返されるパターンを含むファイルができました。ファイルは次のようなものです。

構造番号

4.176801 -0.044096 2.253823

2.994556 0.097622 2.356678

5.060174 -0.115257 3.342200

構造番号

4.180919 -0.044664 2.251182

3.002927 0.098946 2.359346

5.037811 -0.103410 3.389953

ここで、「構造番号」が繰り返されています。「構造番号:1」「構造番号2」のように昇順に番号を書きたいと思います。

どうすればこの問題を解決できますか?

事前にご協力いただきありがとうございます。

4

1 に答える 1

2

私は gaussian というプログラムにまったく詳しくないので、元の入力がどのように見えるかわかりません。誰かが例を投稿すれば、さらに短い解決策を提供できるかもしれません。

ただし、私が得た限り、OPは、で挿入された行に増加する数を追加したいという以外に、自分のコードの出力に満足していますawk

これは、次の行で実現できます (OP のコードを調整します)。

grep -A 7 "Input orientation:" test.log | grep -A 5 "C" | awk '/C/{print "structure number"++i}1' | sed '/--/d' > test.out

補遺:

sed実際の入力を知らなくても、少なくともコマンドを取り除くことができると確信していawkます。また、1 文字の grep パターンを引用符で囲む必要はありません。

grep -A 7 "Input orientation:" test.log | grep -A 5 C | awk '/C/{print "structure number"++i}!/--/' > test.out

テストできないのでわかりませんがawkgrepの仕事もできるはずです。最初の推測として、次のことを試してみます。

awk '/Input orientation:/{li=7}!li{next}{--li}/C/{print "structure number"++i;lc=5}!lc{next}{--lc}!/--/' test.log > test.out

これはコードが少し長くなる可能性がありますが、awkすべての作業を 1 つのプロセスで実行する唯一のソリューションです。テストする入力があれば、より短い解決策を思いつくかもしれません。

于 2013-09-04T09:26:04.613 に答える