Notepad ++ - Removendo a primeira coluna em um arquivo separado por vírgula

14

Eu tenho um grande arquivo CSV que preciso remover a primeira coluna de dados. Não consigo abri-lo no Excel porque o Excel converte alguns dos valores nas colunas em números científicos.

Estou usando o Notepad ++ , e estou tentando vincular a primeira coluna do arquivo EXE,

1,Value1,value2,value3,value4,value5
3445,Value1,value2,value3,value4,value5
12345,Value1,value2,value3,value4,value5
1234,Value1,value2,value3,value4,value5
11,Value1,value2,value3,value4,value5

para parecer

Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5
    
por MikeD 03.08.2012 / 13:20

8 respostas

13

A pesquisa e substituição do Notepad ++ suporta expressões regulares (regex) que podem ser facilmente usadas para isso.

Use a regex a seguir para pesquisar:

^[^,]+,(.+)

Isto coincide com o início da linha, seguido por tantos caracteres quanto possível, não sendo uma vírgula, seguida por uma vírgula, seguida pelo resto da linha. O resto da linha é agrupado como primeira sub-tarefa.

Substitua globalmente por isso:


Isso denota a primeira sub-rotina (resto da linha). Por que cada linha é substituída por tudo após a primeira coluna e vírgula.

Depois que eu encontrei a maneira acima de fazê-lo em uma única substituição global (e atualizei minha resposta de acordo), notei que esta resposta é basicamente idêntico, mas também fornece uma explicação abrangente do regex usado.

Observação: A regex ^[^,]+, mais curta não pode ser usada para substituir globalmente por uma string vazia, pois o Notepad ++ substituirá todas as colunas, exceto a última: Depois de substituir a primeira coluna, a segunda coluna (que agora é o primeiro e corresponde exatamente ao regex) será substituído, depois o terceiro e assim por diante. No entanto, o regex mais curto funciona perfeitamente com outros editores (por exemplo, com PSPad ou vim ).

    
por 03.08.2012 / 13:22
10

Pressione Ctrl + H e execute a seguinte substituição:

Find what:          .*?,(.*)
Replace with:       
Wrap around:        checked
Regular expression: selected
. matches newline:  unchecked

Agora pressione Alt + A para substituir todas as ocorrências.

Como funciona

  • A expressão regular .*?,(.*) corresponde a uma linha inteira:

    • .*?, corresponde a tudo antes da primeira vírgula, incluindo a própria vírgula.

      .* significa qualquer número de ocorrências de qualquer caractere, e o ponto de interrogação torna o quantificador preguiçoso , ou seja, ele corresponde ao mínimo de caracteres possível.

    • (.*) corresponde a tudo depois da primeira vírgula.

      A inclusão de .* entre parênteses converte-o em um subpadrão, para que o mastro possa ser acessado no campo de substituição.

  • representa a primeira sub-correspondência (correspondência para (.*) ).

    Como resultado, o Notepad ++ substitui a linha por tudo o que segue a primeira vírgula.

por 03.08.2012 / 14:41
6

No Windows, você pode fazer isso da seguinte maneira.

for /F "tokens=2,3,4,5,6 delims=," %i in (Input.csv) do @echo %i,%j,%k,%l,%m  >> output.csv

Eu assumi que você tem apenas 6 colunas. Se você tiver muito mais colunas, tente experimentar * no campo de fichas. A ideia é retirada de Windows para o comando

    
por 03.08.2012 / 14:06
3

Supondo que você tenha um sistema Linux ou algum ambiente estilo unix (eu gosto gow , ou você pode snarf os utilitários off unixutils ) Eu acredito que rodar o arquivo através de cut -d , -f2-6 deve fazer o truque - deveria, se bem me lembro, fazer o truque - -d define o deliminador e f2-6 imprime o segundo para o 6º caractere.

cat input.csv | cut -d , -f2-6 > output.csv faria o truque de pegar o arquivo de entrada e chutar um arquivo de saída. Não está usando o bloco de notas, mas é rápido e muito simples.

    
por 03.08.2012 / 13:36
2

Você deve ser capaz de carregar o CSV no Excel e tratá-lo como texto (evitando que ele converta para números científicos).

  1. Abra o Excel
  2. Guia de dados
  3. Do texto
  4. Escolher delimitado
  5. Escolha Outro: ","
  6. Para todas as colunas, selecione-as na janela Visualização de dados e escolha Texto
  7. Remover sua coluna
  8. Salvar como CSV
por 03.08.2012 / 13:33
1

O Notepad ++ possui edição de coluna embutida e comando Line Up by (,) (plugin TextFX) dando uma solução gráfica point-and-click que provavelmente será a primeira vez. Isso evita ter que usar expressões regulares ou programação shell, os quais normalmente requerem alguma depuração até que eles façam exatamente o que você quer e nada mais.

Ponto de partida : arquivo CSV com colunas desalinhadas, não é fácil editá-las por coluna ...

    1,Value1,value2,value3,value4,value5
    3445,Value1,value2,value3,value4,value5
    12345,Value1,value2,value3,value4,value5
    1234,Value1,value2,value3,value4,value5
    11,Value1,value2,value3,value4,value5
    ...

Procedimento:

  1. Selecione as linhas de interesse - talvez o arquivo inteiro.

  2. Use o comando de menu TextFX > TextFX Edit > Alinhe várias linhas por vírgula (,) Isso alinha todas as linhas por coluna e facilita a edição de colunas.

    1    ,Value1,value2,value3,value4,value5
    3445 ,Value1,value2,value3,value4,value5
    12345,Value1,value2,value3,value4,value5
    1234 ,Value1,value2,value3,value4,value5
    11   ,Value1,value2,value3,value4,value5
    
  3. Digite Modo de coluna na coluna após a primeira vírgula (,) Para um pequeno número de linhas, use os comandos do teclado: Alt + Shift + DownArrow.
    Se precisar trabalhar em muitas linhas (arquivo grande), use Alt + mouse e clique na coluna desejada da linha primeiro , em seguida, mova para a última linha do arquivo e Alt + Shift + clique no mesmo posição da coluna. Isso ativa o modo de coluna no arquivo INTEIRO - você deve ver uma linha vertical por trás de todas as vírgulas.

  4. Excluir no modo de coluna remove uma coluna inteira de caracteres. Assim, você pode excluir tudo antes da primeira vírgula em todas as linhas de uma vez para obter:

    Value1,value2,value3,value4,value5
    Value1,value2,value3,value4,value5
    Value1,value2,value3,value4,value5
    Value1,value2,value3,value4,value5
    Value1,value2,value3,value4,value5
    

Feito!

Comente essa solução em comparação com os vários outros sugeridos até agora:

A edição em modo de coluna é bastante poderosa e, quando combinada com as opções de plug-in do TextFX, aplica-se a uma variedade de situações de maneira pontual e rápida.

Por exemplo, se você decidiu excluir a segunda coluna ou a nona coluna rapidamente, essa abordagem funciona praticamente sem modificações.

Expressões regulares, shell scripts, por outro lado, irão cumprir o objetivo, sim, mas em problemas complicados você gastará mais tempo "desassociando" sua sintaxe.

A versátil funcionalidade incorporada do Notepad ++ é um dos seus principais pontos strongs: você obtém um pouco de energia sem precisar recorrer a "programação".

    
por 20.08.2012 / 04:05
0

Se você estiver familiarizado com o plug-in do console Python para o Notepad ++, posso aconselhar outro método. Você precisa adicionar seu texto no documento Notepad ++ e executar o próximo script no console:

res = []
data = editor.getText().split('\r\n')
for i in data:
    res.append(i.split(',')[1:])

for i in res:
    editor.addText(', '.join(i)+'\r\n')

Este script adicionou o texto do resultado ao seu documento atual do Notepad ++.

    
por 20.08.2012 / 18:02
-1

Execute vim (no modo de comando, se não pressionar Escape).

Digite o seguinte comando para mapear a ação de remover a primeira coluna para a q key:

:map q 0df,j0

O que significa:

  • 0 - vai para o começo da linha
  • df, - d eletear tudo até , caractere (incluindo vírgula),
  • j - desce uma linha
  • 0 - vai para o começo da linha

Em seguida, aplique esta ação em todas as linhas:

:0,$ normal q

O que significa, execute a ação que é atribuída à chave q da linha desde o início (0) até o final ($).

    
por 03.08.2012 / 13:58