Generaremos un archivo csv con los siguientes valores
yp1234,577,1,3
yp5678,577,3,5
yp9012,132,8,9
Necesito extraer datos y crear archivos basados en la segunda columna. Si es 577, entonces toda la línea debe extraerse y colocarse en un archivo separado. Quiero decir que necesito un archivo que tenga líneas con la segunda columna como 577 solo y otro archivo con la segunda columna como 132 solo
Intenté usar IF pero no funcionó

Respuestas:
Uso
awk:Esto creará los dos archivos
577.csvy132.csven su directorio actual.El comando anterior supone que solo puede tener
132o577como el segundo campo. Creará un nombre de archivo para cada uno de los valores encontrados en el segundo campo del conjuntofile.csv.Si hay otros valores aparte de los dos que le interesan, y desea ignorar esas líneas, haga esto en su lugar:
fuente
awkimplementaciones con errores que no se pueden usarprint > $2 ".cvs". En aquellos, que tendría que primero compute el nombre del archivo, y luego hacer laprint:fname = $2 ".cvs"; print > fname.Me gusta la
awksolución de terdon , pero en aras de la exhaustividad, aquí hay una sugerencia utilizando solobashProducirá archivos
577.csvy132.csven el directorio actual.fuente
Para extraer todos los 577 a stdout
- edit 1 Corregido, basado en el comentario de @terdon a continuación para evitar coincidencias falsas cuando al menos 3 comas en línea con 577.
Pero creo que su
awksolución es más integral.fuente
foo577baroyp9012,132,8,577..*también pueden coincidir con comas para que no sepas con qué campo coinciden. Podría ser el segundo, también podría ser el 45. Mi segunda queja fue incorrecta, tienes razón en que las comas protegen de la coincidenciafoo577bar.Utilizando
csvkit:Las
-c 2marcascvsgrepconsideran la segunda columna, y con ella-m 577le pedimos que coincida con la cadena577en esa columna.Lo siguiente se escribirá a
output.csv:Para hacer coincidir varias cadenas y escribir el resultado en un archivo para cada cadena:
Esto creará los dos archivos
output-132.csvyoutput-577.csv.fuente