shell script para ler e imprimir uma parte de uma string
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.
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,