Estoy tratando de eliminar el primer y el último carácter de cada línea en un archivo de texto y guardar la versión truncada resultante en un nuevo archivo. ¿Alguien tiene una idea sobre cómo hacerlo de manera eficiente usando awku otros programas / comandos de Linux específicamente para archivos grandes?
input.txt
(s,2,4,5,6)
"s,1,5,5,2"
{z,0,4,5,3}
[y,2,4,5,5]
(y,4,4,5,7)
(r,20,4,5,7)
(e,9,4,5,2)
Salida esperada.txt
s,2,4,5,6
s,1,5,5,2
z,0,4,5,3
y,2,4,5,5
y,4,4,5,79
r,20,4,5,7
e,9,4,5,2
text-processing
sed
awk
pacodelumberg
fuente
fuente

ssedo el cofre de herramientas Heirloomsedpuede lograr un mejor rendimiento.sedSegún su pregunta, elimine la última y la primera palabra del archivo de entrada de la siguiente manera:
fuente
s/.\(.*\).$/\1/. Podría ser más rápido debido a que no usa referencias posteriores, y la pregunta mencionó "archivos grandes".time yes | head -n 10000000 | COMMAND >/dev/null. Tengorev input | cut -c2- | rev | cut -c2-→ 0.14s,sed 's,.\(.*\).$,\1,'→ 3.38s;awk '{print substr($0,2,length()-2);}'→ 3.50s;sed 's/.$//; s/^.//'→ 5.09s.sed 's/.\(.*\)./\1/'parece ser más rápido quesed 's/^.\(.*\).$/\1/'(GNU sed nuevamente). Además, el rendimiento depende de la configuración regional (interpretación de lo que es un personaje) y lasedimplementación (en ese sentido, sed del cofre de herramientas de la herencia es considerablemente más rápido que GNU sed).Hay muchas posibilidades, como siempre
Explicación
,- el delimitador de sed, también puede ser cualquier otro carácter, dado que se escapa donde sea necesario..Empareja un solo personaje\(.*\)- Agrupe la parte restante, y esta se almacena para recuperar más..Empareja un solo personaje de nuevo$- Fin de la línea\1- generar el texto que coincide con el grupo de arribagreemplazar globalmente en la línea.fuente
g? solo habrá una coincidencia por línea.También puedes hacerlo
awksi lo prefieresfuente
Esto debería funcionar también. Bien "traduce" cada uno de los caracteres a nada (eliminar).
La desventaja es que los eliminará si no son el primer / último personaje también. También echará de menos los caracteres finales que no incluyas en el
()[....fuente