Pergunta

membros bom dia,

Eu tenho um arquivo de entrada, que tem linhas de dígitos numéricos (perto de 2000 linhas) Eu quero extrair out "do segundo para o de oito dígitos da direita" de cada linha da seqüência numérica em um arquivo separado, com o para os resultados separadas por uma vírgula, como mostrado.

Exemplo: input.txt

00000000000001303275310752

00000000000001827380519015

00000000000000800081610361

00000000000000449481894004

00000000000000449481894004

00000000000001812612607514

Resultado esperado: NEWFILE.TXT

7531075,

8051901,

8161036,

8189400,

8189400,

1260751,

Eu estou supondo algo como 'sed' pode ser usado para resolver o meu problema, mas eu não tenho certeza de como proceder para alcançar este objectivo. Estou ligado a uma máquina rodando em Solaris 5.10 apreciaria se alguém pode me orientar com uma breve explicação.

Atenciosamente,

principiante.

Foi útil?

Solução

Para a entrada de largura fixa, tente:

cut -c19-26 input.txt | sed 's/$/,/'

ou seja, extrair os dias 19 e 26 de caráter txt de entrada e, em seguida, substituir o fim da linha com uma vírgula.

Se você tem linhas de comprimento variável, você vai precisar de algo um pouco diferente.

Outras dicas

Você pode truncar os zeros à esquerda com:

sed 's/^0*//g'

Assim, algo como:

sed 's/^0*//g' input.txt | sed 's/$/,/'

deve funcionar.

Tente:

perl -pe 's/^.*(\d{7})\d$/$1,/' < input.txt

Ou se você não gosta de expressões regulares:

perl -pe '$_ = substr($_,-9,-2) . ",\n"' < input.txt

Este trabalho vontade para qualquer linha de comprimento fixo ou variável.

Aqui está uma solução em python, deve ser intuitivo:

$ cat data2
00000000000001303275310752
00000000000001827380519015
00000000000000800081610361
00000000000000449481894004
00000000000000449481894004
00000000000001812612607514

$ cat digits.py
import sys
for line in sys.stdin:
    print '%s,' % (line[-9:-2])

$ python digits.py < data2
7531075,
8051901,
8161036,
8189400,
8189400,
1260751,
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top