Mam plik csv, w którym każdy wiersz definiuje pomieszczenie w danym budynku. Wraz z pokojem, każdy rząd ma pole podłogowe. To, co chcę wydobyć, to wszystkie piętra we wszystkich budynkach.Analizowanie pliku csv za pomocą awk i ignorowanie przecinków w polu
Mój plik wygląda tak ...
"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 "
Co chcę to wszystko Podłogi we wszystkich budynkach.
Używam cat, awk, sort i uniq, aby uzyskać tę listę, chociaż mam problem z "," w polu nazwy budynku, np. "BRICKER HALL, JOHN W" i zrzuca całą moją generowanie csv.
cat Buildings.csv | awk -F, '{print $1","$2}' | sort | uniq > Floors.csv
Jak mogę awk użyć przecinka, ale zignorować przecinek między "" pola? Czy ktoś może mieć lepsze rozwiązanie?
Na podstawie odpowiedzi pod warunkiem, sugerując parser awk csv udało mi się uzyskać rozwiązanie:
cat Buildings.csv | awk -f csv.awk | awk -F" -> 2|" '{print $2}' | awk -F"|" '{print $2","$3}' | sort | uniq > floors.csv
Nie chcemy korzystać z programu csv awk a następnie stamtąd chcę używać "-> 2 | " który jest formatowany na podstawie programu csv awk. Drugi plik $ 2 drukuje tylko zawartość przeanalizowaną przez CSV, ponieważ program wypisuje pierwotną linię, a następnie "-> #", gdzie # jest liczbą z pliku csv. (Tj. Kolumny). Stamtąd mogę podzielić ten wynik CSV awk na "|" co jest tym, co zastępuje przecinek. Następnie sortuj, dodawaj i wykopuj do pliku i gotowe!
Dzięki za pomoc.
działa to doskonale z wyjątkiem "csv druku [1], csv [2]" powinno być w rzeczywistości "CSV druku [0], csv [1]" Dzięki! – Chris
Każdy pomysł, jak uzyskać awk, aby pozbyć się dodatkowych białych znaków na polach i nie używać stałej szerokości? "TEST LOTNISKA" Chcę być "TESTEM LOTNISKA" – Chris
@ CHRIS: Czy białe znaki są osobnym pytaniem, ponieważ jeśli "drukuję csv [0], csv [1]" otrzymuję "0 00BDF" zamiast "TEST LOTNICZKI" ? –