Tengo un archivo que tiene un texto como este:
AAAA
BBBB
CCCC
DDDD
1234
5678
9012
3456
EEEE
7890
etc ...
Y quiero hacer coincidir las líneas alfabéticas con las líneas numéricas para que sean así:
AAAA 1234
BBBB 5678
CCCC 9012
DDDD 3456
EEEE 7890
¿Alguien sabe de una manera simple de lograr esto?
emacs
... ¿Está buscando unaelisp
solución o cómo ejecutar un script de shell desde emacs?Respuestas:
Una forma de usar
perl
:Contenido de
script.pl
:Contenido de
infile
:Ejecútalo como:
Y resultado:
fuente
s/\A\s*(.*?)\s*\Z/\1/
.En
awk
, preservar las líneas vacías, suponiendo que el archivo esté bien formateado, pero se podría agregar lógica para verificar el archivo:fuente
o, en un solo paso, sin archivos temporales
El último
sed
paso elimina el delimitador en las líneas en blanco, que es introducido porpaste
...fuente
Con emacs use operaciones de rectángulo para cortar las líneas de texto y pegarlas antes de las líneas numéricas.
fuente
Si las entradas están en orden,
Divida la entrada en entradas alfabéticas y entradas numéricas, usando
grep
:grep "[[:alpha:]]\+" < file > alpha
grep "[[:digit:]]\+" < file > digit
Une los dos archivos resultantes
alpha
ydigit
, usandopaste
:paste alpha digit
(puede agregar-d " "
para que use un espacio en lugar de una pestaña)fuente
paste <(grep "[[:alpha:]]\+" file) <(grep "[[:digit:]]\+" file)
o con una única sustitución de proceso:grep "[[:alpha:]]\+" file | paste - <(grep "[[:digit:]]\+" file)
.Lástima que awk no tenga buenas funciones push / pop / unshift / shift. Aquí hay un pequeño fragmento de Perl
fuente
default
cláusula, las líneas en blanco se imprimen inmediatamente, por lo que el espacio en blanco antes de "1234" se mostrará antes de la línea "AAAA".Proporcione un archivo con texto, intente usar
pr
y procese la sintaxis de sustituciones como se muestra a continuación:Puede ajustar el ancho
-w9
o eliminar espacios mediantesed "s/ //g"
.fuente