Tengo un archivo csv donde cada fila define una habitación en un edificio determinado. Junto con la sala, cada fila tiene un campo de piso. Lo que quiero extraer son todos los pisos en todos los edificios.Analizar un csv usando awk e ignorar comas dentro de un campo
Mi archivo tiene este aspecto ...
"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 "
Lo que quiero es todas las plantas en todos los edificios.
Estoy usando cat, awk, sort y uniq para obtener esta lista aunque estoy teniendo un problema con el "," en el campo de nombre del edificio como "BRICKER HALL, JOHN W" y está tirando todo mi generación csv
cat Buildings.csv | awk -F, '{print $1","$2}' | sort | uniq > Floors.csv
¿Cómo puedo obtener awk para usar la coma, pero ignorar una coma entre "" de un campo? Alternativamente, ¿alguien tiene una mejor solución?
Sobre la base de la respuesta dada sugiere un analizador awk csv yo era capaz de obtener la solución:
cat Buildings.csv | awk -f csv.awk | awk -F" -> 2|" '{print $2}' | awk -F"|" '{print $2","$3}' | sort | uniq > floors.csv
No queremos usar el programa csv awk y luego desde allí Quiero usar un "-> 2 | " que es el formato basado en el programa csv awk. La impresión $ 2 allí imprime únicamente el contenido analizado csv, esto es porque el programa imprime la línea original seguida de "-> #" donde # es el conteo analizado desde csv. (Es decir, las columnas.) A partir de ahí puedo dividir este resultado awk csv en el "|" que es con lo que reemplaza la coma. ¡Entonces el género, uniq y pipe a un archivo y listo!
Gracias por la ayuda.
Esto funciona muy bien excepto "csv de impresión [1], csv [2]" en realidad debería ser "csv de impresión [0], csv [1]" Gracias! – Chris
¿Alguna idea de cómo obtener awk para deshacerse del espacio en blanco adicional en los campos y no usar un ancho fijo? "AIRPORT TEST" Quiero ser "AIRPORT TEST" – Chris
@Chris: Es el espacio en blanco una pregunta separada, porque si 'imprimo csv [0], csv [1]' obtengo "0 00BDF" en lugar de "AIRPORT TEST" ? –