У меня есть CSV-файл, где каждая строка определяет комнату в данном здании. Наряду с комнатой, в каждом ряду есть пол поля. Что я хочу извлечь, так это все этажи во всех зданиях.
Мой файл выглядит так ...
"u_floor","u_room","name"
0,"00BDF","AIRPORT TEST "
0,0,"BRICKER HALL, JOHN W "
0,3,"BRICKER HALL, JOHN W "
0,5,"BRICKER HALL, JOHN W "
0,6,"BRICKER HALL, JOHN W "
0,7,"BRICKER HALL, JOHN W "
0,8,"BRICKER HALL, JOHN W "
0,9,"BRICKER HALL, JOHN W "
0,19,"BRICKER HALL, JOHN W "
0,20,"BRICKER HALL, JOHN W "
0,21,"BRICKER HALL, JOHN W "
0,25,"BRICKER HALL, JOHN W "
0,27,"BRICKER HALL, JOHN W "
0,29,"BRICKER HALL, JOHN W "
0,35,"BRICKER HALL, JOHN W "
0,45,"BRICKER HALL, JOHN W "
0,59,"BRICKER HALL, JOHN W "
0,60,"BRICKER HALL, JOHN W "
0,61,"BRICKER HALL, JOHN W "
0,63,"BRICKER HALL, JOHN W "
0,"0006M","BRICKER HALL, JOHN W "
0,"0008A","BRICKER HALL, JOHN W "
0,"0008B","BRICKER HALL, JOHN W "
0,"0008C","BRICKER HALL, JOHN W "
0,"0008D","BRICKER HALL, JOHN W "
0,"0008E","BRICKER HALL, JOHN W "
0,"0008F","BRICKER HALL, JOHN W "
0,"0008G","BRICKER HALL, JOHN W "
0,"0008H","BRICKER HALL, JOHN W "
Что я хочу, так это все этажи во всех зданиях.
Я использую cat, awk, sort и uniq для получения этого списка, хотя у меня проблема с "," в поле названия здания, например "BRICKER HALL, JOHN W", и он сбрасывает весь мой CSV поколения.
cat Buildings.csv | awk -F, '{print $1","$2}' | sort | uniq > Floors.csv
Как получить awk, чтобы использовать запятую, но игнорировать запятую между "" поля? Или у кого-нибудь есть лучшее решение?
На основании предоставленного ответа с предложением синтаксического анализатора awk csv я смог получить решение:
cat Buildings.csv | awk -f csv.awk | awk -F" -> 2|" '{print $2}' | awk -F"|" '{print $2","$3}' | sort | uniq > floors.csv
Там мы хотим использовать программу csv awk , а затем оттуда я хочу использовать "-> 2 |" который форматирует на основе программы CSV AWK. Печать $ 2 там печатает только проанализированное csv-содержимое, потому что программа печатает исходную строку, за которой следует «-> #», где # - это количество, проанализированное из csv. (То есть столбцы.) Оттуда я могу разделить этот результат awk csv на "|" который заменяет запятую. Затем сортировка, uniq и труба в файл и готово!
Спасибо за помощь.