Adicionando uma aba entre cada número e letra

1

Eu quero adicionar um caractere de tabulação para separar números e letras do meu arquivo:

71aging
1420anatomical_structure_development
206anatomical_structure_formation_involved_in_morphogenesis
19ATPase_activity
46autophagy
2634biological_process

Então, agora ficaria assim:

71  aging
1420  anatomical_structure_development
206  anatomical_structure_formation_involved_in_morphogenesis
19  ATPase_activity
46  autophagy
2634  biological_process

Existe um forro sed para isso?

    
por rishi 05.02.2018 / 18:58

5 respostas

2

Abaixo de um é o sed um forro para sua exigência

 sed "s/^[0-9]*/&\t/g" filename

saída

71      aging
1420    anatomical_structure_development
206     anatomical_structure_formation_involved_in_morphogenesis
19      ATPase_activity
46      autophagy
2634    biological_process
    
por 05.02.2018 / 19:16
1
sed -re 's/([0-9]+)([^0-9].*)/\t/g'

Encontre dígitos e depois não dígitos e outras coisas. E adicione um espaço após os dígitos.

    
por 05.02.2018 / 19:12
1

Use este sed

sed 's/^[0-9][0-9]*/&\t/' infile
    
por 05.02.2018 / 19:15
1
tab=$(printf '\t')
sed "s/\([0-9]\)\([A-Za-z]\)/${tab}/" < input > output

Isso procura pela primeira aparição de um número (0-9) seguido por uma letra (A-Za-z) e o substitui por (esse número) seguido por uma tabulação seguida por (essa letra).

Para omitir a variável $ {tab}, digite o mesmo comando sed, mas substitua a guia $ {tab} por uma aba real ( Control-V TAB ):

sed 's/\([0-9]\)\([A-Za-z]\)/TAB-HERE/' < input > output
    
por 05.02.2018 / 19:17
-1

Com o que você tem como entrada, e POSIX BRE :

sed 's/^\([[:digit:]]*\)\(.*\)$/\t/g' input.txt

Também é suficiente usar perl no agrupamento:

$ perl -pe 's/(\d+)(.*)/\t/g' input.txt
    
por 05.02.2018 / 19:14