У меня есть файл 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 и выход из файла в файл!
Спасибо за помощь.