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.csv
y132.csv
en su directorio actual.El comando anterior supone que solo puede tener
132
o577
como 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
awk
implementaciones 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
awk
solución de terdon , pero en aras de la exhaustividad, aquí hay una sugerencia utilizando solobash
Producirá archivos
577.csv
y132.csv
en 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
awk
solución es más integral.fuente
foo577bar
oyp9012,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 2
marcascvsgrep
consideran la segunda columna, y con ella-m 577
le pedimos que coincida con la cadena577
en 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.csv
youtput-577.csv
.fuente