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
$1
como la cadena de formatoprintf
?"%s", ...
. Actualizadoawk
comando 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
xargs
usa/bin/echo
para imprimir, tenga en cuenta que los datos que parecen opcionesecho
serán interpretados como tales.awk
pr
o
columnas (del paquete autogen)
Salida típica:
fuente
xargs
llamar la líneaecho
oprintf
?xargs
llamadas/bin/echo
por defectoxargs
parece opciones para/bin/echo
causar 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
printf
para hacerlo comoEso dividirá las palabras en el contenido
your_file
y las emparejará e imprimirá con pestañas intermedias. Podría usar más%s
cadenas de formatoprintf
para tener columnas adicionales.fuente
(reemplace 4 por el número de columnas)
fuente
rs
Utilidad BSD (remodelación):0 2
es filas y columnas . Especificar0
significa "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%2
aindex%3
Salida de muestra:
Versión de tres columnas (como se dijo anteriormente, solo
index%3 == 0
cambió)fuente