Combinando as linhas que têm mais de um espaço e imprimindo-as

1

Eu tenho 23 pastas e cada pasta tem duas subpastas (sempre o mesmo nome) e cada subpasta tem exatamente dois arquivos (sempre o mesmo nome). Então parece com isso:

Folder1/BindingDB/chiral.smi
                 nochiral.smi
Folder1/Xray/chiral.smi
             nochiral.smi

 Folder2/BindingDB/chiral.smi
                     nochiral.smi
 Folder2/Xray/chiral.smi
                 nochiral.smi

Por exemplo, o arquivo chiral.smi tem esta aparência:

COCCNC(=O)[C@H]1[C@@H]([C@H]2CN3C(=O)C=CC=C3[C@@H]1N2C4=NC(=C(S4)C5=CC=CC=C5)C6=CC=C(C=C6)Cl)CO K00000004
C1[C@H]2[C@H](C=C([C@H]3[C@@H]2[C@H]4[C@@H]1[C@@H]([C@H]4C=C3)CC/C=C/CC5=CC=C(C=C5)O)C(=O)O)O  K00000005
C[C@]12CCC[C@@]([C@@H]1CC[C@@]34[C@H]2C[C@H]5[C@@H](C3)[C@]5(C4)CO)(C)C(=O)O  K00000006

Então, aqui, as duas últimas linhas K00000005 e K00000006 têm espaço duplo e quero combinar essas duas linhas.

Estou tentando verificar novamente todos os arquivos chiral.smi e nochiral.smi em minhas pastas, se eles tiverem linhas com espaço duplo (eu deveria ter apenas um espaço em cada linha de cada arquivo).

Eu tentei bash algo assim:

for i in */*/*.smi ; do sed -e "s/\s\{2,\}/ /g" $i; done , mas não está funcionando. Além disso, quando executo sed -e "s/\s\{3,\}/ /g" *smi na subpasta (BindingDB ou Xray), ele imprime todas as linhas que possuem apenas um espaço. Alguém pode me ajudar desde que eu não consigo descobrir qual é o problema?

    
por sergio 16.05.2018 / 04:52

2 respostas

2

Você pode listar os nomes de qualquer arquivo .smi no qual qualquer linha contenha dois espaços adjacentes com

grep --include='*.smi' -rl '  ' .

Se você deseja imprimir as linhas, remova a opção l .

    
por steeldriver 17.05.2018 / 04:30
0

Se eu entendi corretamente, algo como

grep -l '  ' */*/*.smi

imprime os nomes de "espaço duplo"

Se você quiser normalizar os espaços ( ' ' - > ' ' ) você pode tentar

sed -ri.bak 's/\s{2,}/ /g' */*/*.smi

e remova os arquivos de backup se tudo correr bem

rm /*/*.smi.bak
    
por JJoao 17.05.2018 / 10:28