file1.csv
A,,C,D
A,,C,D
A,,C,D
A,,C,D
file2.csv
A,B
A,B
A,B
A,B
Output.csv desejado
A,B,C,D
A,B,C,D
A,B,C,D
A,B,C,D
Eu tentei usar "ingressar" e "colar" sem sucesso. Existe um comando bash para fazer isso? A coluna "A" é a mesma nos dois .csv
arquivos.
Respostas:
Com apenas o
awk
comando:Obtenha uma linha do arquivo1 e armazene-a na variável local
f1
, depois imprima a linha armazenadaf1
e, finalmente, imprima o terceiro ($3
) e o dianteiro ($3
) campos do arquivo1 que delimitou por vírgula por,
completo e altere o OFS (separador do campo de saída [espaço por padrão]) para vírgula (,
).O comando curto seria assim:
cole o arquivo2, recorte e cole a terceira coluna na próxima (
-f3-
) do arquivo1.Com
awk
epaste
(opção A)O comando abaixo também copia as duas últimas colunas (
C,D
) do arquivo1 no final de cada linha do arquivo2:Acima do comando, cole o conteúdo do arquivo2, imprima um delimitador de vírgula (
-d','
) e, em seguida, cole os dois últimos campos (NF
é o índice do último campo e$NF
a cadeia de caracteres que é o seu índiceNF
. Assim$(NF-1)
é o segundo campo antes do último campo) do arquivo1 quando esse índice redefine ou divide com vírgula espectador (-F','
).Com
awk
epaste
(opção B)Este comando também é o mesmo que acima (
$3
e$4
aponta para o terceiro e o quarto campos de cada linha do arquivo1):Ou outra solução com o
cut
comando:comando cut no comando acima, primeiro corte o primeiro campo (
-f1
indexado com delimitador de vírgula (-d.
)) de file1 (cut -d, -f1 file1
), depois corte e cole o segundo campo de file2 (cut -d, -f2 file2
) e, finalmente, corte e cole a terceira coluna (-f3
) nos nexts (-
) do arquivo1 (cut -d, -f3- file1
) novamente.Este comando também retorna o mesmo resultado:
cole o segundo campo de file1 (
awk -F',' '{print $1}' file1
), imprima uma vírgula (-d,
), cole a segunda coluna de file2 (awk -F',' '{print $2}' file2
) e, finalmente, cole a segunda e a última coluna de file1 (awk -F',' '{print $3","$4}' file1
) novamente.fonte
Aqui está uma beleza (eu acho):
Dividido em etapas:
Etapa 1. Instale o csvkit:
Etapa 2. Use o comando join com uma vírgula como separador
Etapa 3. Alimente as colunas reais que você deseja. Observe como você alimenta a primeira coluna duas vezes, porque é aquela na qual a junção é realmente executada (comportamento padrão de
join
).ou em forma abreviada:
Você pode redirecionar essa saída padrão para um arquivo (Saída desejada), se desejado.
Vantagens
Este método tem várias vantagens sobre os outros propostos.
Em primeiro lugar: realiza uma junção real. Isso significa que também pode ser usado para dados mais complexos. É muito fácil fazer uma junção em outro campo, por exemplo. Ele não olha simplesmente para a posição do campo, mas realmente leva a coluna em consideração. Na verdade, ele funciona com o formato dos dados (csv) e não o trata como texto.
Segundo, ele usa o muito poderoso kit de ferramentas csv, que também permite: a) exibir estatísticas com um comando (
csvstats)
, b) verificar se os dados estão limpos (csvclean
), mas também transformá-los em json, sql ou carregá-los no Pitão! Este kit de ferramentas é muito usado em ciência de dados para preparação de dados.fonte
sudo apt-get install python-dev python-pip python-setuptools build-essential
- linkAqui está outro lindo. Eu acho que é a mais fácil de todas as sugestões, até agora.
Se você não instalou o csvtool no passado, precisará instalá-lo
sudo apt-get install csvtool
.Dos documentos:
Observe como, no nosso caso, estamos substituindo as segundas colunas dos arquivos.
Exemplos
file1.csv
file2.csv
Combinando os dois arquivos:
O que você basicamente faz é colar a coluna dois
file2.csv
como coluna 2 emfile1.csv
.Observe que isso também funciona no mesmo documento. Se você deseja trocar duas colunas, pode fazê-lo usando o mesmo arquivo que input.csv e update.vsc.
fonte
Para mover um número escolhido de colunas de um arquivo para outro:
de dois arquivos:
arquivo_1
arquivo_2
Quando você define
cols = 1
:Mas quando você define
cols = 2
:cols = 3
:Como usar
Copiá-lo em um arquivo vazio, definir o caminho para
file1
,file2
e o número de colunas para mover, guardá-lo comomove.py
e executá-lo por:Também é possível adicionar uma ou mais colunas do meio das colunas do arquivo de origem dessa maneira.
fonte
import csv
embora.Outro método em python através do módulo csv.
script.py
Para executar o script acima,
Resultado:
fonte