Vamos gerar um arquivo csv com valores abaixo
yp1234,577,1,3
yp5678,577,3,5
yp9012,132,8,9
Preciso extrair dados e criar arquivos com base na segunda coluna. Se for 577, toda a linha deverá ser extraída e colocada em um arquivo separado. Quero dizer, preciso de um arquivo que tenha linhas com a segunda coluna apenas como 577 e outro arquivo com a segunda coluna como 132 sozinha
Eu tentei usar o IF, mas não funcionou
Respostas:
Use
awk
:Isso criará os dois arquivos
577.csv
e132.csv
no seu diretório atual.O comando acima pressupõe que você só pode ter
132
ou577
como o segundo campo. Ele criará um nome de arquivo para cada um dos valores encontrados no segundo campo do todofile.csv
.Se houver outros valores além dos dois nos quais você estiver interessado e desejar ignorar essas linhas, faça o seguinte:
fonte
awk
implementações de buggy que não podem ser usadasprint > $2 ".cvs"
. Sobre aqueles, você teria que primeiro compute o nome do arquivo, em seguida, fazer oprint
:fname = $2 ".cvs"; print > fname
.Eu gosto da
awk
solução de Terdon , mas por uma questão de integridade, aqui está uma sugestão usando apenasbash
Ele produzirá arquivos
577.csv
e132.csv
no diretório atual.fonte
Para extrair todos os 577 para stdout
- edit 1 Corrigido, com base no comentário de @ terdon abaixo para evitar correspondências falsas quando pelo menos 3 vírgulas estiverem alinhadas com 577.
Mas acho que sua
awk
solução é mais abrangente.fonte
foo577bar
ouyp9012,132,8,577
..*
também podem corresponder vírgulas para que você não saiba qual campo está correspondendo. Poderia ser o segundo, também poderia ser o 45º. Minha segunda reclamação estava errada, você está certo ao proteger as vírgulas da correspondênciafoo577bar
.Usando
csvkit
:As
-c 2
marcascvsgrep
consideram a segunda coluna e, com-m 577
isso, solicitamos que ela corresponda à string577
dessa coluna.O seguinte será escrito para
output.csv
:Para corresponder a um número de strings e escreva a saída em um arquivo para cada string:
Isso criará os dois arquivos
output-132.csv
eoutput-577.csv
.fonte