como grep para a linha com várias palavras-chave e torná-lo em csv

3

Com este comando:

cmd param | grep 'foo1\|foo5\|foo7'

Eu obtenho

foo1=bar1
foo5=bar5
foo7=bar7

como faço essa saída gravar em um arquivo csv?

em última análise eu gostaria de executar o comando em um loop com param mudando para cada loop (daí a saída), então será útil se o arquivo se tornar como:

cat output.csv
    foo1=bar1, foo5=bar5, foo7=bar7
    foo1=value, foo5=value, foo7=value
    
por resultsway 17.03.2018 / 19:49

3 respostas

2

Aqui está outro verso:

echo $(cmd param | grep 'foo1\|foo5\|foo7') | sed 's/ /, /g' | tee -a output.csv

O comando: echo $(cmd param | grep 'foo1\|foo5\|foo7') imprimirá a saída de forma linear.

Isso coloca uma vírgula entre as variáveis: sed 's/ /, /g'

Isso anexa a saída a uma nova linha no final do arquivo: tee -a output.csv

    
por mchid 17.03.2018 / 20:57
2

Isso funcionaria para você:

cmd param | grep 'foo1\|foo5\|foo7' | tr '\n' ',' | sed 's/,$//'
  • tr '\n' ',' substitui cada linha de retorno por um ','
  • sed 's/,$//' remove o último caractere se for ','

E se você quiser colocá-lo em um arquivo csv você pode adicionar um '\ n' no final da linha e redirecioná-lo para um arquivo csv:

cmd param | grep 'foo1\|foo5\|foo7' | tr '\n' ',' | sed 's/,\?$/\n/' >> file.csv
  • sed 's/,\?$/\n/' Irá remover o último char se for um ',' e adicionar um '\ n'
  • >> é usado para adicionar no final do seu arquivo csv sem remover o que já está dentro
por Paul 17.03.2018 / 20:17
0

Usando o Perl, você pode pegar o padrão, juntá-lo e imprimi-lo para todos os arquivos desejados:

perl -0nE 'say join(",",/(foo\d+=\w+)/g)' ex* > out

Isso evitará o loop externo

    
por JJoao 24.05.2018 / 21:28