filtra linhas em csv e salva em um novo arquivo csv

0

Eu quero filtrar o arquivo csv linha por linha e selecionar as linhas que satisfazem a condição if.

Como o arquivo csv é separado por uma vírgula, o código deve ser assim:

'BEGIN {FS=','}
{while read line 
if (condition) 
   save selected line to a new csv file
} done < file.csv'

Como posso salvar as linhas selecionadas em um novo arquivo csv se ele satisfizer a condição if? Alguém pode fornecer alguns exemplos?

    
por zz_0513 08.05.2018 / 15:35

2 respostas

0

Eu usaria o Python para algo assim. Aqui está um exemplo:

import csv

#Create a csv file with some data
myData = [["first_name", "second_name", "Grade"],
          ['Alex', 'Brian', 'A'],
          ['Tom', 'Smith', 'B']]

myFile1 = open('file1.csv', 'w')
with myFile1:
    writer = csv.writer(myFile1)
    writer.writerows(myData)

#Create a second csv file
myFile2 = open('file2.csv', 'w')

#Read the first file created with data
with open('file1.csv') as File:
    reader = csv.reader(File)
    for row in reader:
        #Print every row to the console
        print(row)
        if row[0] == "Alex":
           #If the first cell of the row says Alex, say hi and add the row to the second file
           print "Hi Alex"
           with myFile2:
             writer = csv.writer(myFile2)
             writer.writerow(row)
    
por 08.05.2018 / 18:17
1

Use awk desta forma

awk -F, '(condition) { print >"to_new.csv"}' file.csv

O -F, especifica a vírgula delimitadora , que os campos são separados. Se condição corresponder aos seus critérios, ele redirecionará a linha para um novo arquivo chamado to_new.csv .

Usamos o redirecionamento single - ' > ' aqui. Quando esse tipo de redirecionamento é usado, o to_new.csv é apagado antes que a primeira saída seja gravada nele. As gravações subseqüentes no mesmo to_new.csv não apagam o arquivo, mas o anexam. (Isso é diferente de como você usa redirecionamentos em scripts shell.) Se to_new.csv não existe, ele é criado.

Ou simplesmente escreva:

awk -F, 'condition' file.csv > to_new.csv
    
por 08.05.2018 / 18:44