grep “alguma coisa” anyfiles.log afile.csv, não é necessário imprimir o caminho de entrada e o nome do arquivo para o arquivo CSV

9

Eu tenho alguns arquivos de registros, eles têm mais de 30000 linhas. Eu preciso encontrar o nome "domínio" e salvar em arquivo CSV, mas depois de salvar, todas as linhas no arquivo CSV foi adicionado o caminho e o nome do arquivo de arquivos de entrada no início da própria linha do arquivo CSV. Como posso fazer se não precisar do nome do caminho e do arquivo de entrada para adicionar arquivos CSV?

Exemplo:

Input
#cat /home/log/any.log

any things..domain, anything
any things..domain, anything
any things..domain, anything


grep "domain" /home/logs/any.log > newfile.csv

Output:
#cat newfile.csv
/home/logs/any.log:domain
/home/logs/any.log:domain
/home/logs/any.log:domain


#----My requirement output is:

cat newfile.csv
domain
domain
domain

Atenciosamente, por favor me ajude se alguém souber

    
por Chaxiong 25.01.2013 / 03:25

2 respostas

22

Use a opção --no-filename para o grep.

  

Suprime o prefixo dos nomes de arquivos na saída. Este é o padrão quando há apenas um arquivo (ou apenas entrada padrão) para pesquisar.

grep --no-filename "domain" 

Referência: Manual do Grep

    
por Nemo 25.01.2013 / 09:04
1

Veja man cut para detalhes, mas a resposta curta é grep "domain" /home/logs/*.log | cut -d: -f2 >newfile.csv .

Ou veja man grep e grep -o "domain" /home/logs/*.log >newfile.csv

PS: grep NÃO imprime o nome do arquivo se houver apenas UM arquivo na linha de comando, como grep "domain" /home/logs/any.log em seu exemplo. Se você quiser forçar a saída de nomes de arquivos, grep "domain" /home/logs/any.log /dev/null fará o truque.

    
por waltinator 25.01.2013 / 08:43