manipulação de arquivos CSV

1

Eu tenho dois arquivos csv, digamos A e B. Eu percebi que eu acidentalmente misturei as coisas e agora, a fim de desfazer o erro que eu quero escrever um script de shell de tal forma que os dados na terceira coluna do arquivo A para ser escrito na quarta coluna do arquivo B e dados na quarta coluna arquivo B para ser escrito na terceira coluna do arquivo A. Eu sei que o comando "cut" pode ser usado para buscar dados de colunas específicas, mas eu não sei qual comando usar para escrever em um arquivo csv após um determinado número de ocorrências do delimitador em uma única linha.

Como escrever um roteiro assim?

    
por private ryan 31.07.2016 / 20:00

2 respostas

2

Dado

A.csv:
1,2,V,4

B.csv:
X,Y,Z,3

Então

paste -d, <(cut -d, -f1,2 A.csv) <(cut -d, -f4 B.csv) <(cut -d, -f4 A.csv)
1,2,3,4
    
por 31.07.2016 / 20:58
1

awk é seu amigo

Faça uma cópia de fileA para dizer fileA.bak & fileB para dizer fileB.bak :

#first changing fileB
awk -v FS="," 'NR==FNR{fileA[i++]=$3;next}{$4=fileA[j++];print}' fileA.bak fileB.bak > fileB 
#fileB should be Okay now.
#now changing fileA
awk -v FS="," 'NR==FNR{fileB[i++]=$4;next}{$3=fileA[j++];print}' fileB.bak fileA.bak > fileA
#fileA should be Okay now.
#verify that you have the desired contents in both fileA & fileB
#Now delete the backup files
rm fileA.bak fileB.bak

Notas
1. É possível combinar os scripts awk , mas porque dividi-los torna as coisas mais claras e legíveis.
2. Essa solução pressupõe que você tenha o mesmo número de registros em fileA e fileB , conforme entendido na pergunta.

    
por 31.07.2016 / 20:38