1

常に(1日あたり1500を超える)多くのファイルがあり、「\ HF =」を検索する必要があります。これには、値の例があります。

\HF=-546.523456

これはほとんど同じ値になることはなく、ほとんどの場合負の値です。

ここでの問題は、「\ HF」がファイルの下部近くに表示されることですが、次のように2つの連続した行で区切られて表示される可能性があります。

bla bla bla \H
F=number

また

bla bla bla \
HF=number

私はたくさんグーグルして、私がこれに到達したこの読書の多くを混ぜ合わせます:

grep "\\\\HF=[-]\?[0-9]*[.]\?[0-9]*\\\\" *.log

(これらは.logファイルです)

正確な「\HF」を取得しないと、grepコマンドが機能しません。理由はわかりませんが、-rどちらも機能しません。また、サブディレクトリがたくさんあります。

bashスクリプトの作成を手伝ってもらえますか?

これがファイルの下部の例です

 -1.8078238555,2.9578874797\H,-6.5637417591,1.9616010611,-0.4401499738\
 H,-6.788515386,1.1005867152,1.097842586\H,-6.6310211349,0.1875790572,-
 0.4056194057\\Version=EM64L-G09RevB.01\State=1-A\HF=-2032.6976718\RMSD
 =5.982e-09\RMSF=5.561e-07\Dipole=3.5537566,0.6605675,0.6605341\Quadrup
 ole=-5.9562335,7.5807637,-1.6245302,-27.037518,-2.3011825,2.5397027\PG
 =C01 [X(C37H33B1O8)]\\@


 THE WORLD IS MADE UP OF THE WILLS, THE WON'TS, AND THE CANT'S:
 THE WILLS DO EVERYTHING,
 THE WON'TS DO NOTHING,
 THE CAN'TS CAN'T DO ANYTHING.

                               -- FROM WALT DISNEY'S "BLACK HOLE"
 Job cpu time:  1 days  5 hours 59 minutes 54.7 seconds.
 File lengths (MBytes):  RWF=   2510 Int=      0 D2E=      0 Chk=     20 Scr=      1
 Normal termination of Gaussian 09 at Mon Dec 24 19:58:22 2012.
4

1 に答える 1

1

まず最初に、必要なフラグは、ディレクトリ-Rを再帰的に処理することです。grep

次に、必要な情報がファイルの終わりまでにあることがわかっているので、情報がそこにあることを確認するのに十分な行を取得し、改行を削除して、単純な検索を実行します。

次の操作を行うことができます。

tail -30 <file> | sed "s/^ *\(.*\) *$/\1/" |
    tr -d "\n" | grep -oP "\\\\HF=[-]?\d+\.\d+"

これは再帰的に行う必要があるため、次を使用できますxargs

find . -type f -name '*.log' -print0 |
    xargs -0 -I {} bash -c 'tail -30 "{}" | sed "s/^ *\(.*\) *$/\1/" |
        tr -d "\n" | grep --label "{}" -oHP "\\\\HF=[-]?\d+\.\d{1,4}"'

数値に小数が含まれていない可能性がある場合は、式を次のように変更できます。

... grep --label "{}" -oHP "\\\\HF=[-]?\d+(\.\d{1,4})?"

ファイル「temp.log」の場合:

bla bla bla \
HF=-546.523456
something else but a number
bla bla bla \
HF=-546.523456
something else but a number

出力は次のとおりです。

./temp.log:\HF=-546.523456
./temp.log:\HF=-546.523456
于 2013-01-21T13:42:27.690 に答える