Extrai algumas colunas da saída do grep

1

Eu executei o comando

grep -a --binary-file=text "DLDM" /home/path/ldm.log-$1* | grep -a "$line"

e a saída é algo assim: -

/home/path/ldm.log2015:"unix","20150518 11:36:09",DLDM,CUST_PP,"unix%unix@pp",11,0,,"7A104802E728","4529800000","123456789",0,0,0,0,3,"75126BFC5DA0|548B0F66882B|250E4473F3C6",,0,"COUNTRY_CODE",21,5769,15,0,1,"CURRENCY",0.0255,1,,,,"","","001",6,"20150518 11:36:09","",""

Eu quero imprimir apenas colunas específicas, como

20150518 11:36:09 , 7A104802E728 , 4529800000 , 123456789 , CURRENCY

e, se possível, posso alterar CURRENCY para outra coisa (por exemplo: META) como string na saída?

    
por Asif 19.05.2015 / 04:25

2 respostas

3

você poderia usar awk , pelo menos no lugar do segundo grep ? Algo como

grep -a --binary-file=text "DLDM" /home/path/ldm.log-$1* |  awk -F, "/$line/ {print \ \",\" \ \",\" \ \",\" \ \",META\"}"

Observe que todo o escape é para que você possa usar $line no padrão, se não precisar que ele seja uma variável, você poderia usar aspas simples para as aspas externas e ignorar a maioria das citações internas.

Para substituir a string CURRENCY por META, altere o awk para o seguinte:

grep -a --binary-file=text "DLDM" /home/path/ldm.log-$1* | awk -F, "/$line/ {gsub(\"CURRENCY\", \"META\", \);print \ \",\" \ \",\" \ \",\" \ \",\" \}"
    
por 19.05.2015 / 04:42
0

Use cut para extrair as colunas que você precisa (fornecendo os números das colunas para nós, seria uma gentileza) e sed para alterar o texto:

grep ... | cut -d, -f2,9,10,11,26 | sed -e 's/CURRENCY/META/' -e 's/"//g'

saídas

20150518 11:36:09,7A104802E728,4529800000,123456789,META

Outra abordagem, já que seus dados de entrada se parecem com um CSV bem formado (ignorando a parte antes dos dois primeiros pontos), é usar uma linguagem com um analisador de CSV adequado

grep ... | ruby -rcsv -ne '
    csv_text = $_[/(?<=:).+/]           # ignore up to the first colon
    row = CSV.parse_line csv_text       # parse
    out = row.values_at(1,8,9,10,25)    # extract your fields
    out[-1]["CURRENCY"] = "META"        # text replacement of last field
    puts CSV.generate_line out          # output                       
'
    
por 19.05.2015 / 21:39