2016-06-23 7 views
0

Я хочу увидеть весь вывод моего скрипта, но сохранить только строки, соответствующие «vlim», в новый файл. Я почти понял это, но не могу заставить его работать так, как я этого хочу. В настоящее время я застрял между использованием:Использование tee и grep для сохранения определенных строк вывода в файл

python gmakemovie.test movie.cfg.test --overwrite | tee >(grep vlim) /output.txt 
grep vlim output.txt > vlim.txt 

или

python gmakemovie.test movie.cfg.test --overwrite | grep vlim | tee /output.txt 

Верхний вариант показывает весь мой вывод, но и копирует все выходные в output.txt. Нижний вариант копирует только «vlim», но не показывает остальную часть моего вывода, поэтому я не могу сказать, где я нахожусь в своем сценарии.

Для ясности, это то, что мой выход выглядит следующим образом:

imported pygad v0.4.32+ga1eacb4.dirty 
from parameter file (fragmentary): 
    snaps:  200 - 200 
    width:  1000.0 [kpc] 
    pixel:  500 x 500 
    x - y:  x - y 
    softening: [ 0.2 0.45 2.52 20.  0.2 0.2 ] [ckpc h_0**-1] 
==================================================== 
get orientation from trace file "filepath": 
    L:  [ 241.01309204 544.96875 -366.44366455] [1e+10 ckpc h_0**-1  Msol h_0**-1 km s**-1] 
get first non-zero center from trace files 
    from snapshot 200: 
    center: [ 36821.75390625 35120.65625  33730.06640625] [ckpc h_0**-1] 
==================================================== 
run in serial 
==================================================== 
read snapshot "filepath" 
    z = 2.84615386294 
    t = 2.33634681236 [Gyr] 
get center and orientation from trace file "filepath": 
    center: [ 36821.75390625 35120.65625  33730.06640625] [ckpc h_0**-1] 
    R200: 47.4815177362 [kpc] 
center snapshot 
orientate snapshot 
render... 
    axis 1: stars... 
    im_lum = np.log10(im_lum) 
vlim: [-6.59883562 -4.09629962] 
    np.ndarray.__idiv__(self, x) 
    axis 2: gas... 
vlim: [-0.46031536 0.83438775] 

, и я хочу, чтобы выходной файл выглядеть следующим образом:

vlim: [-6.59883562 -4.09629962] 
vlim: [-0.46031536 0.83438775] 

Я работаю в терминале на моем Mac

ответ

3

Это woud легче всего просто

$ datagenerator | tee outfile-complete | grep 'pattern' >outfile-filtered & 
$ less outfile-complete 

Если это длинный сценарий, это позволит вам отслеживать прогресс с помощью less (используйте F в less, чтобы заставить его действовать как tail -f), в то время как работа выполняется как фоновое задание.

EDIT: На самом деле, приглядевшись на вашей первой команды:

$ datagenerator | tee >(grep 'pattern') output 

Только крошечные изменения необходимы, чтобы сделать то, что вы предназначенных:

$ datagenerator | tee >(grep 'pattern' >outfile-filtered) output-complete 

grep в суб-оболочка записывала на стандартный вывод. Изменение означает, что отфильтрованные данные поступают в файл вместо этого, и полный вывод идет на консоль и до output-complete

Итак, теперь у вас есть два решения, которые делают несколько разные вещи.

+0

извините, если это очевидно, поэтому я бы установил его так: python gmakemovie movie.cfg.1 --overwrite | tee output_complete.txt | grep vlim output_filtered.txt и grep будет проходить через full.txt, чтобы найти vlim? – Julia

+0

Нет, 'grep' не будет смотреть на полный вывод * из файла *, а из стандартного вывода из' tee'. – Kusalananda

+0

хорошо, я, должно быть, сделал что-то не так, потому что все, что было сделано, было ясно как gmakemove.test и movie.cfg.test, создать два пустых файла (output_.txt) и добавить '--overwrite' и 'grep' в каталог I работал в .. – Julia