dividir un archivo en varios archivos usando comandos de shell

dividir un archivo en varios archivos usando comandos de shell

Quiero dividir mi archivo en varios archivos.

A continuación se muestra el archivo que tengo.

sort a # 3|4
sort a # 2|5
sort b # 1|2
sort b # 2|5

Quiero tener el archivo separado a continuación

archivo1

sort a # 3|4
sort a # 2|5

archivo2

sort b # 1|2
sort b # 2|5

Como puede ver, los dividí según la segunda columna. Como tengo muchos valores diferentes para la columna dos, lleva mucho tiempo dividir el archivo de forma laboriosa. ¿Cómo lograr este problema?

Respuesta1

AWKsolución:

awk '!a[$2]++{ fn="file"++c }{ print > fn }' inputfile
  • !a[$2]++- Verifique si encuentra un segundo valor de campo único $2utilizándolo como índice de la matriz a. La condición !a[$2]++se evaluará truesolo en la primera aparición de $2un valor único.
  • fn="file"++c- generandoNombre del archivocon sufijo incremental++c

Visualización de resultados:

$ head file[12]
==> file1 <==
sort a # 3|4
sort a # 2|5

==> file2 <==
sort b # 1|2
sort b # 2|5

Respuesta2

split -l 2 test

Esto generará 2 archivos divididos. Salida de archivos divididos:

$ cat xaa
sort a # 3|4
sort a # 2|5
$ cat xab
sort b # 1|2
sort b # 2|5

información relacionada