Estou usando o git bash, então acho que não há problema em fazer perguntas no fórum do Unix, mas não estou familiarizado com o Unix, só uso ls
, find
e grep
, então, por favor, me corrijam se eu estiver errado.
Tenho centenas de .csv
arquivos e cada um pode ter até várias centenas de linhas. Agora, gostaria de remover as linhas csv vazias -- por linhas csv vazias, não estou me referindo a linhas com apenas espaços em branco, mas linhas todas com vírgulas ( ,,,
).
Por exemplo, um arquivo csv tem conteúdo como
Header2,Header3,Header5,Header7
a,b,c,d
,,,
aa,bb,cc,dd
,,,
,,,
aaa,bbb,ccc,ddd
,,,
,,,
,,,
, há centenas de linhas no arquivo, gostaria de atualizá-lo para
Header2,Header3,Header5,Header7
a,b,c,d
aa,bb,cc,dd
aaa,bbb,ccc,ddd
E há centenas desses arquivos, observe que nem todos os arquivos csv devem ser atualizados. Atualmente, estou usando vimgrep RegExPattern folders
o comando do editor vim, que filtra os arquivos csv de destino por padrão de expressão regular, verificando seu conteúdo, por exemplo, /,Header5,/
para filtrar apenas arquivos csv com Header5
; então, usarei cdo g/RegExPattern/d | update | edit #
o comando que pode executar uma substituição de expressão regular em cada arquivo encontrado, por exemplo, aqui eu uso cdo g/\v^,*$/d
para excluir linhas apenas com vírgulas.
No entanto, o Vim substitui e registra cada remoção de linha, pois pode haver centenas de correspondências em um arquivo e há centenas de arquivos .csv, o que é bem lento.
Existe uma maneira de realizar essa tarefa no Unix?