Команда sed для определения определенного значения - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть файл журнала, который имеет следующие строки:

Time = 0.9998

DILUBiCGStab:  Solving for Ux, Initial residual = 1.99533113036e-06, Final residual = 2.96249561335e-10, No Iterations 1
DILUBiCGStab:  Solving for Uy, Initial residual = 0.000417321531609, Final residual = 7.45521650555e-10, No Iterations 2
DILUBiCGStab:  Solving for Uz, Initial residual = 0.000101783532684, Final residual = 2.22925230463e-10, No Iterations 2
PISO corrector = 1
GAMG:  Solving for p, Initial residual = 0.0176383087802, Final residual = 0.000128354492605, No Iterations 2
GAMG:  Solving for p, Initial residual = 0.00157044214071, Final residual = 6.05258709305e-06, No Iterations 3
time step continuity errors : sum local = 1.07897616229e-11, global = -1.21038993529e-13, cumulative = 3.09373543327e-11
PISO corrector = 2
GAMG:  Solving for p, Initial residual = 0.00396386732982, Final residual = 1.39668381997e-05, No Iterations 2
GAMG:  Solving for p, Initial residual = 0.000387895480416, Final residual = 2.61276578576e-06, No Iterations 2
time step continuity errors : sum local = 4.66055831479e-12, global = -9.01547272112e-14, cumulative = 3.08471996055e-11
PISO corrector = 3
GAMG:  Solving for p, Initial residual = 0.0014865117999, Final residual = 5.92873264058e-06, No Iterations 2
PISO: converged in 3 correctors
GAMG:  Solving for p, Initial residual = 0.00018575923819, Final residual = 1.19602052482e-06, No Iterations 2
time step continuity errors : sum local = 2.13399696121e-12, global = -5.81036463017e-14, cumulative = 3.07890959592e-11
DILUBiCGStab:  Solving for nuTilda, Initial residual = 1.76763063985e-06, Final residual = 1.29954103535e-10, No Iterations 1
ExecutionTime = 22441.72 s  ClockTime = 22620 s
deltaT
Courant Number mean: 0.819402719286 max: 27.6501988889

FunctionObject:cflBlendingFactor:blendingFactors_regAir_1
60 faces with Courant number based blending for field U
U maximum, minimum and mean blending factors: 1, 0, 0.99151536773

Time = 1

DILUBiCGStab:  Solving for Ux, Initial residual = 1.99417672249e-06, Final residual = 2.96731829464e-10, No Iterations 1
DILUBiCGStab:  Solving for Uy, Initial residual = 0.000410917566734, Final residual = 7.49859275563e-10, No Iterations 2
DILUBiCGStab:  Solving for Uz, Initial residual = 0.000102377986855, Final residual = 2.29772350504e-10, No Iterations 2
PISO corrector = 1
GAMG:  Solving for p, Initial residual = 0.0176826205863, Final residual = 0.000128293418219, No Iterations 2
GAMG:  Solving for p, Initial residual = 0.0015679277464, Final residual = 5.63358605766e-06, No Iterations 3
time step continuity errors : sum local = 1.00341782615e-11, global = -1.18362574514e-13, cumulative = 3.06707333847e-11
PISO corrector = 2
GAMG:  Solving for p, Initial residual = 0.00396565210757, Final residual = 1.3750596194e-05, No Iterations 2
GAMG:  Solving for p, Initial residual = 0.000389224800858, Final residual = 2.48748848039e-06, No Iterations 2
time step continuity errors : sum local = 4.43399728322e-12, global = -9.30058928658e-14, cumulative = 3.05777274918e-11
PISO corrector = 3
GAMG:  Solving for p, Initial residual = 0.00148579017778, Final residual = 5.81035754297e-06, No Iterations 2
PISO: converged in 3 correctors
GAMG:  Solving for p, Initial residual = 0.000185729750804, Final residual = 1.1427315649e-06, No Iterations 2
time step continuity errors : sum local = 2.03756129196e-12, global = -6.12459431033e-14, cumulative = 3.05164815487e-11
DILUBiCGStab:  Solving for nuTilda, Initial residual = 1.76831276642e-06, Final residual = 1.28999442413e-10, No Iterations 1
ExecutionTime = 22451 s  ClockTime = 22630 s

Итак, все, что мне нужно, это иметь возможность только для чтения значений 0.0176383087802 и 0.0176826205863. Моя попытка такая, как показано ниже;

cat log | grep 'Solving for p' | cut -d' ' -f9 | sed -n 'p;N' | tr -d ',' > p_tmp.dat

Однако это всегда приводит к чтению всех значений. Я продолжал читать о команде sed, но, похоже, по какой-то причине не могу обойтись. Любой может дать некоторое представление о том, как заставить его читать первое значение каждый раз и выводить его в файл dat.

Ответы [ 3 ]

0 голосов
/ 07 ноября 2019

Я не уверен, понимаю ли я, чего вы хотите достичь. В случае, если вы хотите извлечь только первое совпадение.

cat log | grep 'Solving for p' | head -1 | cut -d' ' -f9 | tr -d ','

Нет необходимости использовать sed вообще

0 голосов
/ 07 ноября 2019

Не уверен, почему вы делаете акцент на команде sed, чтобы выполнить задачу, которая может быть легко достигнута другими командами. sed в основном используется для поиска и замены, но, похоже, вы хотите достичь чего-то другого.

в случае, если вы намеревались получить первое значение записи, которое вы можете использовать при подходе ниже.

 [cloudera@quickstart sub1]$ cat a.txt 
    Time = 0.9998

DILUBiCGStab:  Solving for Ux, Initial residual = 1.99533113036e-06, Final residual = 2.96249561335e-10, No Iterations 1
DILUBiCGStab:  Solving for Uy, Initial residual = 0.000417321531609, Final residual = 7.45521650555e-10, No Iterations 2
DILUBiCGStab:  Solving for Uz, Initial residual = 0.000101783532684, Final residual = 2.22925230463e-10, No Iterations 2
PISO corrector = 1
GAMG:  Solving for p, Initial residual = 0.0176383087802, Final residual = 0.000128354492605, No Iterations 2
GAMG:  Solving for p, Initial residual = 0.00157044214071, Final residual = 6.05258709305e-06, No Iterations 3
time step continuity errors : sum local = 1.07897616229e-11, global = -1.21038993529e-13, cumulative = 3.09373543327e-11
PISO corrector = 2
GAMG:  Solving for p, Initial residual = 0.00396386732982, Final residual = 1.39668381997e-05, No Iterations 2
GAMG:  Solving for p, Initial residual = 0.000387895480416, Final residual = 2.61276578576e-06, No Iterations 2
time step continuity errors : sum local = 4.66055831479e-12, global = -9.01547272112e-14, cumulative = 3.08471996055e-11
PISO corrector = 3
GAMG:  Solving for p, Initial residual = 0.0014865117999, Final residual = 5.92873264058e-06, No Iterations 2
PISO: converged in 3 correctors
GAMG:  Solving for p, Initial residual = 0.00018575923819, Final residual = 1.19602052482e-06, No Iterations 2
time step continuity errors : sum local = 2.13399696121e-12, global = -5.81036463017e-14, cumulative = 3.07890959592e-11
DILUBiCGStab:  Solving for nuTilda, Initial residual = 1.76763063985e-06, Final residual = 1.29954103535e-10, No Iterations 1
ExecutionTime = 22441.72 s  ClockTime = 22620 s
deltaT
Courant Number mean: 0.819402719286 max: 27.6501988889

FunctionObject:cflBlendingFactor:blendingFactors_regAir_1
60 faces with Courant number based blending for field U
U maximum, minimum and mean blending factors: 1, 0, 0.99151536773

Time = 1

DILUBiCGStab:  Solving for Ux, Initial residual = 1.99417672249e-06, Final residual = 2.96731829464e-10, No Iterations 1
DILUBiCGStab:  Solving for Uy, Initial residual = 0.000410917566734, Final residual = 7.49859275563e-10, No Iterations 2
DILUBiCGStab:  Solving for Uz, Initial residual = 0.000102377986855, Final residual = 2.29772350504e-10, No Iterations 2
PISO corrector = 1
GAMG:  Solving for p, Initial residual = 0.0176826205863, Final residual = 0.000128293418219, No Iterations 2
GAMG:  Solving for p, Initial residual = 0.0015679277464, Final residual = 5.63358605766e-06, No Iterations 3
time step continuity errors : sum local = 1.00341782615e-11, global = -1.18362574514e-13, cumulative = 3.06707333847e-11
PISO corrector = 2
GAMG:  Solving for p, Initial residual = 0.00396565210757, Final residual = 1.3750596194e-05, No Iterations 2
GAMG:  Solving for p, Initial residual = 0.000389224800858, Final residual = 2.48748848039e-06, No Iterations 2
time step continuity errors : sum local = 4.43399728322e-12, global = -9.30058928658e-14, cumulative = 3.05777274918e-11
PISO corrector = 3
GAMG:  Solving for p, Initial residual = 0.00148579017778, Final residual = 5.81035754297e-06, No Iterations 2
PISO: converged in 3 correctors
GAMG:  Solving for p, Initial residual = 0.000185729750804, Final residual = 1.1427315649e-06, No Iterations 2
time step continuity errors : sum local = 2.03756129196e-12, global = -6.12459431033e-14, cumulative = 3.05164815487e-11
DILUBiCGStab:  Solving for nuTilda, Initial residual = 1.76831276642e-06, Final residual = 1.28999442413e-10, No Iterations 1
ExecutionTime = 22451 s  ClockTime = 22630 s


[cloudera@quickstart sub1]$ cat a.txt | sed -n '/PISO corrector = 1/{n;P;}' | cut -d' ' -f9 | tr -d ','
0.0176383087802
0.0176826205863
0 голосов
/ 07 ноября 2019

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

awk '/Solving for p/ && match($0,/=[^,]*/) && ++count==1{print substr($0,RSTART+2,RLENGTH-2)}' Input_file

Объяснение:

awk '                                                        ##Starting awk program from here.
/Solving for p/ && match($0,/=[^,]*/) && ++count==1{         ##Checking condition if a line has string Solving for p and then matching a regex to match everything from first occurrence of = till first occurrence of , THEN checking condition if variable count value is equal to 1 then do following.
  print substr($0,RSTART+2,RLENGTH-2)                        ##Printing sub-string of line starting from RSTART+1 value to till valie of RLENGTH-2 value.
}
'  Input_file                                                ##Mentioning Input_file name here.
...