script de shell para leer e imprimir una parte de una cadena
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.
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,