Я хочу отфильтровать файл CSV построчно и выбрать строки, которые удовлетворяют условию if.
Поскольку файл csv разделен запятой, код должен выглядеть примерно так:
'BEGIN {FS=','} {while read line if (condition) save selected line to a new csv file } done < file.csv'
Как я могу сохранить выбранные строки в новый CSV-файл, если он удовлетворяет условию if? Кто-нибудь может привести несколько примеров?
Я бы использовал Python для чего-то вроде этого. Вот пример:
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)
Используйте awk
таким образом
awk -F, '(condition) { print >"to_new.csv"}' file.csv
Параметр -F,
указывает запятую ,
которая разделяет поля. Если условие соответствует вашим критериям, оно перенаправит строку в новый файл с именем to_new.csv
.
Мы использовали redirect single- ‘ >
‘ здесь. Когда используется этот тип перенаправления, to_new.csv стирается до того, как в него будет записан первый вывод. Последующие записи в тот же файл to_new.csv не стирают файл, а добавляют к нему. (Это отличается от того, как вы используете перенаправления в сценариях оболочки.) Если to_new.csv не существует, он создается.
Или просто напишите:
awk -F, 'condition' file.csv > to_new.csv