Tengo un archivo de texto:
a aa aaa b bb bbb c cc ccc
d dd ddd e ee eee f ff fff
g gg ggg h hh hhh i ii iii
j jj jjj
¿Cómo puedo procesarlo y obtener un archivo de 2 columnas como este:
a aa
aaa b
bb bbb
c cc
ccc d
dd ddd
e ee
eee f
ff fff
g gg
ggg h
hh hhh
i ii
iii j
jj jjj
O un archivo de tres columnas como este:
a aa aaa
b bb bbb
c cc ccc
d dd ddd
e ee eee
f ff fff
g gg ggg
h hh hhh
i ii iii
j jj jj
Prefiero obtener una solución awk, pero otras soluciones también son bienvenidas.
text-processing
awk
Solo un alumno
fuente
fuente

$1como la cadena de formatoprintf?"%s", .... Actualizadoawkcomando en su otra respuesta a esta pregunta, por cierto.Ponga cada campo en una línea y post-columnate.
Cada campo en una línea
tr
grep
sed
o más portátil:
awk
o
Columnate
pegar
Para 2 columnas:
Para 3 columnas:
etc.
sed
Para 2 columnas:
Para 3 columnas:
etc.
xargs
Como se
xargsusa/bin/echopara imprimir, tenga en cuenta que los datos que parecen opcionesechoserán interpretados como tales.awk
pr
o
columnas (del paquete autogen)
Salida típica:
fuente
xargsllamar la líneaechooprintf?xargsllamadas/bin/echopor defectoxargsparece opciones para/bin/echocausar problemas ... Agregué una advertencia.fuente
Como señaló Wildcard, esto solo funcionará si su archivo está bien formateado, ya que no hay caracteres especiales que el intérprete interpretará como globos y usted está satisfecho con las reglas predeterminadas de división de palabras. Si hay alguna pregunta sobre si sus archivos "pasarán" esa prueba, no utilice este enfoque.
Una posibilidad sería usarlo
printfpara hacerlo comoEso dividirá las palabras en el contenido
your_filey las emparejará e imprimirá con pestañas intermedias. Podría usar más%scadenas de formatoprintfpara tener columnas adicionales.fuente
(reemplace 4 por el número de columnas)
fuente
rsUtilidad BSD (remodelación):0 2es filas y columnas . Especificar0significa "calcular filas automáticamente a partir de columnas".fuente
Enfoque de script Python.
La idea básica aquí es aplanar todas las palabras en su texto en una lista, y luego imprimir una nueva línea después de cada segundo elemento (es decir, en columnas en dos columnas). Si desea 3 columnas, cambie
index%2aindex%3Salida de muestra:
Versión de tres columnas (como se dijo anteriormente, solo
index%3 == 0cambió)fuente