Pregunta

Buenos días miembros,

Tengo un archivo de entrada que tiene filas de dígitos numéricos (cerca de 2000 filas). Quiero extraer " el segundo a los ocho dígitos desde la derecha " de cada fila de la cadena numérica en un archivo separado, con el resultado separado por una coma como se muestra.

Ejemplo: input.txt

00000000000001303275310752

00000000000001827380519015

00000000000000800081610361

00000000000000449481894004

00000000000000449481894004

00000000000001812612607514

Resultado esperado: newfile.txt

7531075,

8051901,

8161036,

8189400,

8189400,

1260751,

Supongo que algo como 'sed' puede usarse para resolver mi problema, pero no estoy muy seguro de cómo lograrlo. Estoy conectado a una máquina que funciona con Solaris 5.10 Agradezco si alguien puede guiarme con una breve explicación.

saludos,

novato.

¿Fue útil?

Solución

Para entrada de ancho fijo, intente:

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

es decir, extraiga los caracteres 19 a 26 de la entrada txt y luego reemplace el final de línea con una coma.

Si tiene líneas de longitud variable, necesitará algo un poco diferente.

Otros consejos

Puede truncar los ceros iniciales con:

sed 's/^0*//g'

Por lo tanto, algo como:

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

debería funcionar.

Prueba:

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

O si no te gustan las expresiones regulares:

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

Esto funcionará para cualquier línea de longitud fija o variable.

Aquí hay una solución en python, debe ser intuitiva:

$ 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top