Como você obtém uma parte específica de uma palavra em um arquivo usando o awk?

0

Eu tenho um script que é assim: script.m

    rng('shuffle');
    load samples123/stage17/resamp_stage.mat
    indarray = str2num(getenv('arrayindex')); 
    index = (indarray-1)*4+1:(indarray)*4
    samplenow = samplestage(index,:);

    for i = 1:4 
       ind = index(i); 
       i 
       num = 123;
       sampleind = samplenow(i,:);
       opt.Ndrag = 1; 
       a = cputime; 
       outsmpl = continue_dragon(opt,beta,sampleind,stage,num,covsmpl,ind); 
       b = cputime; 
       b-a
       toc 
    end

Gostaria de recuperar apenas 'stage17', que está na segunda linha. Eu tentei o seguinte:

  awk '/samples123/{print $2}' script.m

Mas isso dá: samples123 / stage17 / resamp_stage.mat

Obrigado!

    
por Rishabh Dutta 19.09.2017 / 12:52

2 respostas

0

perl tem melhor suporte a grupos de captura do que awk e é mais adequado para essa tarefa.

perl -lane 'print $1 if /\/(.*)\//' script.m
stage17

perl -lane 'print $1 if /\/[^\d]*(\d+)[^\d]*\//' script.m
17

O mesmo pode ser realizado com awk , no entanto, empregando gensub :

awk '/\/.*\// {a=gensub(/.*\/(.*)\/.*/,"\1","g"); print a}' script.m
stage17

awk '/\/.*\// {a=gensub(/.*\/[^0-9]*([0-9]+)[^0-9]*\/.*/,"\1","g"); print a}' script.m
17

Como você não especifica quais devem ser os critérios de pesquisa, presumo que seja uma linha contendo duas barras; poderia ser a segunda linha, uma linha começando com load , ou uma linha contendo samples123 como seu código awk sugeriria.

    
por 19.09.2017 / 15:42
0

Eu tento usar sed e awk para resolvê-lo ao mesmo tempo.

Se a palavra-chave for samples123 , o comando é

awk 'match($0,/samples123/){print gensub(/.*\/([^\/]*)\/.*/,"\1","g",$0)}' script.m

sed -r -n '/samples123/{s@.*\/([^\/]*)\/.*@@g;p}' script.m

Se não tiver uma palavra-chave, apenas por meio de duas barras / , o comando é

awk 'match($0,/\/[^\/]*\//){print gensub(/.*\/([^\/]*)\/.*/,"\1","g",$0)}' script.m

sed -r -n '/\/[^\/]*\//{s@.*\/([^\/]*)\/.*@@g;p}' script.m
    
por 27.09.2017 / 09:59

Tags