Inserindo uma nova coluna com caracteres específicos, mantendo linhas de um tamanho específico

3

Eu tenho que inserir uma coluna após a quarta coluna com o caractere 'A'.

Cada linha deve ter exatamente 80 caracteres (incluindo espaços) antes da nova linha; se não, podemos adicionar espaços para equalizar. Eu tenho que fazer isso para um grande número de arquivos.

Exemplo de representação de um único arquivo:

Antes:

ATOM    558  O   VAL    86     -12.863  -8.701 -49.495  1.00 64.57           O
ATOM    560  CA  VAL    87     -13.628 -10.486 -47.550  1.00 58.11           C 
.....
.....
.....

Depois:

ATOM    558  O   VAL A  86     -12.863  -8.701 -49.495  1.00 64.57           O  
ATOM    560  CA  VAL A  87     -13.628 -10.486 -47.550  1.00 58.11           C  
.......
.......
    
por Nitha 19.08.2017 / 11:15

2 respostas

4

Talvez você possa substituir apenas um espaço na coluna 5?

$ sed 's/  / A/5' file
ATOM    558  O   VAL A  86     -12.863  -8.701 -49.495  1.00 64.57           O
ATOM    560  CA  VAL A  87     -13.628 -10.486 -47.550  1.00 58.11           C

Você pode passar vários nomes de arquivos para sed , basta usar um shell glob como *.txt ou o que for pegar os arquivos que você deseja editar.

Use o -i flag após o teste para modificar os arquivos.

Isso não alterará os caracteres por linha ... Se você precisar preencher as linhas com 80 caracteres, poderá usar algo como

sed 's/  / A/5' file | awk '{printf "%-80s\n", $0}' 
    
por Zanna 19.08.2017 / 11:34
2

Usando perl :

perl  -lane '$"="\t"; print sprintf("%-80s", "@F[0..3]\tA\t@F[4..10]");' file

A saída:

ATOM    558     O       VAL     A       86      -12.863 -8.701  -49.495 1.00    64.57   O                         
ATOM    560     CA      VAL     A       87      -13.628 -10.486 -47.550 1.00    58.11   C

Para verificar se o comprimento é exatamente "80", passe a saída para awk '{ print length($0), "->", $0 }' :

$ perl ... | awk '{ print length($0), "->", $0 }'
80 -> ATOM      558     O       VAL     A       86      -12.863 -8.701  -49.495 1.00    64.57   O                         
80 -> ATOM      560     CA      VAL     A       87      -13.628 -10.486 -47.550 1.00    58.11   C 
    
por Ravexina 19.08.2017 / 11:56