Eu tenho um arquivo que possui texto como este:
AAAA
BBBB
CCCC
DDDD
1234
5678
9012
3456
EEEE
7890
etc ...
E eu quero combinar as linhas alfabéticas com as linhas numéricas para que elas sejam assim:
AAAA 1234
BBBB 5678
CCCC 9012
DDDD 3456
EEEE 7890
Alguém sabe de uma maneira simples de conseguir isso?
emacs
.. Você está procurando umaelisp
solução ou como executar um shell-script no emacs?Respostas:
Uma maneira de usar
perl
:Conteúdo de
script.pl
:Conteúdo de
infile
:Execute-o como:
E resultado:
fonte
s/\A\s*(.*?)\s*\Z/\1/
.Em
awk
, preservando linhas vazias, assumindo que o arquivo esteja bem formatado, mas a lógica pode ser adicionada para verificar o arquivo:fonte
ou, em uma única etapa, sem arquivos temporários
A última
sed
etapa remove o delimitador sobre as linhas em branco, que é introduzido porpaste
...fonte
Com o emacs, use operações retangulares para cortar as linhas de texto e colá-las antes das linhas numéricas.
fonte
Se as entradas estiverem em ordem,
Divida a entrada em entradas alfabéticas e numéricas, usando
grep
:grep "[[:alpha:]]\+" < file > alpha
grep "[[:digit:]]\+" < file > digit
Junte os dois arquivos resultantes
alpha
edigit
, usandopaste
:paste alpha digit
(você pode adicionar-d " "
para usar um espaço em vez de uma guia)fonte
paste <(grep "[[:alpha:]]\+" file) <(grep "[[:digit:]]\+" file)
ou com uma única substituição de processo:grep "[[:alpha:]]\+" file | paste - <(grep "[[:digit:]]\+" file)
.O awk muito ruim não possui boas funções push / pop / unshift / shift. Aqui está um pequeno fragmento de Perl
fonte
default
cláusula, as linhas em branco são impressas imediatamente; portanto, o espaço em branco antes de "1234" será exibido antes da linha "AAAA".Forneça um arquivo com texto, tente usar
pr
e processe a sintaxe de substituições, conforme abaixo:Você pode ajustar a largura
-w9
ou remover espaços porsed "s/ //g"
.fonte