LINUX.ORG.RU

парсинг текста


0

0

Народ, если у кого есть время помогите решить проблемку. Я сейчас сам сяду разбираться, и обязательно разберусь, но оказывается надо уже вчера. А у гуру наверняка решение займет ну минут пять, поэтому прошу о помощи.

Итак. Есть N (скажем 100) файлов с таким содержимым: ------------------------------------------------- rank= 1 Us = 0.151898577809334 g = 0.300000000000000 alpha= -2.000000000000000E-002 Fugacity= 0.000000000000000E+000 Stiffness KKJ= 0.500000000000000 Nx = 80 Ny= 160 MC step (millions) = 272200.000000000 Z = 544489460.000000 Win_x= 0 <W_x^2>= 0.43165E-01 3/4-prt_out err = 0.475E-03 0.4329E-01 at -> 0.55 0.4281E-01 at -> 0.41 <W_y^2>= 0.22117 3/4-prt_out err = 0.144E-02 0.2218 at -> 0.46 0.2204 at -> 0.28 <n>= 0.15406 3/4-prt_out err = 0.515E-04 0.1541 at -> 0.46 0.1540 at -> 0.28 От файла к файлу числа меняются. Мне надо постоить зависимость скажем alpha от <n>.

Я понимаю что надо идти и читать как перлом например пользоваться. И уже этим занят. Но мне понадобится пара дней освоится - я не программист совсем. А надо очень срочно. Поэтому и решил на паперти постоять. Заранее спачсибо откликнувшимся. PS предпочтительно решение на перле - я уж начал его читать - чтобы зря не пропало все мое читательство.

anonymous

Етить колотить. На отформатировалось. -------------------------------------------------

rank= 1

Us = 0.151898577809334 g = 0.300000000000000

alpha= -2.000000000000000E-002 Fugacity= 0.000000000000000E+000

Stiffness KKJ= 0.500000000000000

Nx = 80 Ny= 160

MC step (millions) = 272200.000000000

Z = 544489460.000000

Win_x= 0

<W_x^2>= 0.43165E-01 3/4-prt_out err = 0.475E-03

0.4329E-01 at -> 0.55

0.4281E-01 at -> 0.41

<W_y^2>= 0.22117 3/4-prt_out err = 0.144E-02

0.2218 at -> 0.46

0.2204 at -> 0.28

<n>= 0.15406 3/4-prt_out err = 0.515E-04

0.1541 at -> 0.46 0.1540 at -> 0.28 вот такой файл

anonymous
()

Эх, ты б лучше поставил "User line break", т.к. неясно, у тебя на одну строку всегда один параметр или может быть несколько?

Допустим, что один.

У тебя порядок параметров всегда один и тот же или нет?

Допустим что нет.

Тогда предлагаю такой приём:

(echo "alpha= 1"; echo test = 3; echo qw = 2) |perl -e "while(<>) { \${\$1} = \$2 if m/\s*(.+?)\s*=(.+)/; }; print \"\${'qw'} \${'alpha'}\n\";"

Здесь вместо 'qw' и 'alpha' можно подставить нужные имена.

Если же порядок всегда одинаков, то проще двигаться в приведённом выше направлении с grep/awk.

alexsaa
()
Ответ на: комментарий от alexsaa

несколько параметров в строке. приведенная выше строчка работает с таким output'ом: cat output1 |perl -e "while(<>) { \${\$1} = \$2 if m/\s*(.+?)\s*=(.+)/; }; print \"\${'<W_y^2>'}\n \${'alpha'}\n\";"

Output:

0.22117 3/4-prt_out err = 0.144E-02

-2.000000000000000E-002 Fugacity= 0.000000000000000E+000

Так что вобщем решение получено. Остальное сам постараюсь додумать. Огромное спасибо.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.