Ter um arquivo com o seguinte conteúdo:
1111,2222,3333,4444
aaaa,bbbb,cccc,dddd
Eu procuro obter um arquivo igual ao original, mas sem uma n-ésima coluna como, para n = 2 (ou pode ser 3)
1111,2222,4444
aaaa,bbbb,dddd
ou, para n = 0 (ou pode ser 1)
2222,3333,4444
bbbb,cccc,dddd
Um arquivo real pode ter gigabytes com dezenas de milhares de colunas.
Como sempre, nesses casos, suspeito que os mágicos da linha de comando possam oferecer uma solução elegante ... :-)
No meu caso real, preciso soltar duas primeiras colunas, o que pode ser feito soltando uma primeira coluna duas vezes em uma sequência, mas suponho que seria mais interessante generalizar um pouco.
text-processing
Ivan
fonte
fonte
,
? (Ou seja,,
só é usado como um separador de campos).,
e nunca ocorre dentro de um campo.Respostas:
Eu acredito que isso é específico para cortar a partir dos coreutils GNU:
Normalmente você especifica os campos que deseja via -f, mas adicionando --complement você inverte o significado, naturalmente. De 'man cut':
Uma ressalva: se alguma das colunas contiver uma vírgula, ela será cortada, porque o corte não é um analisador de CSV da mesma maneira que uma planilha. Muitos analisadores têm idéias diferentes sobre como lidar com vírgulas de escape no CSV. Para o caso simples de CSV, na linha de comando, o corte ainda é o caminho a percorrer.
fonte
cut
disparada porque não é um analisador de CSV. Se um campo CSV tiver um separador de campo em seu valor, ele estará entre aspas. Btw, sobre o assuntocut
,-f
assume intervalos de campo.cut -f, -d3-
produzirá o terceiro campo, removendo os dois primeiros.cut -d, -f3-
Se os dados forem simplesmente constituídos por colunas separadas por vírgula:
Você também pode usar o awk, mas é um pouco estranho, porque ao limpar um campo é fácil, remover o separador exige algum trabalho. Se você não tem um campo vazio, não é tão ruim:
Se você possui um CSV real, onde as vírgulas podem aparecer dentro dos campos, se citadas corretamente, você precisa de uma biblioteca CSV real .
fonte