7 votos

¿Cómo se prepara un carácter para comenzar cada línea en un archivo de más de 250.000 líneas usando un script?

Tengo un archivo de texto con 250.000 líneas y necesito añadir el mismo carácter al principio de cada línea. He tratado de usar varios plugins de edición multilínea/columna en Atom y Sublime pero se cuelgan - supongo que debido al tamaño del archivo.

¿Esto es algo que podría hacer con un bash/zsh script - o con AppleScript/Automator tal vez?

10voto

Michael Zhou Puntos 167

Ponga una A mayúscula en cada línea de un archivo y escriba un nuevo archivo

awk '{print "A"$0}' < FILE > NEWFILE

9voto

scruss Puntos 121

Para preparar X al comienzo de cada línea de file escribiendo a newfile en la Terminal:

sed 's/^/X/' file > newfile

Aquí estoy usando sed el editor de flujo de Unix, para usar un muy simple La expresión regular a s ubican el comienzo de cada línea (el ^ con una X.

2voto

El editor de la corriente sed es probablemente la herramienta más rápida y afilada construida exactamente para esta tarea.

Utilice el comando de inserción (la nueva línea después de \ es parte de la sintaxis):

sed 'i\
X' file > newfile

$ time sed 'i\                     
X' line250000 >/dev/null

real    0m0.118s
user    0m0.102s
sys     0m0.012s

El retraso o la sobrecarga de esta operación es extremadamente baja, lo que la hace muy eficiente para archivos enormes.

1voto

qarma Puntos 71

Este bash un fragmento de la misma, que se añadirá a cada línea de un archivo con un hachís ( # ) y guardarlo en un nuevo archivo:

IFS=$'\r\n'; printf '#%s\n' $(</path/to/file.txt) > /path/to/newfile.txt

Explicación

  • IFS=$'\r\n' : Esto establece el separador de campo para que sólo los personajes \r (retorno del carro) y \n (línea nueva) se utilizan para delimitar una cadena. La configuración predeterminada se puede restablecer utilizando: IFS=$' \t\n'

  • printf : Este es un comando incorporado en bash que se utiliza para dar formato al texto según el patrón suministrado como primer argumento. En este caso, #%s\n le dice que formatee cada argumento posterior como una cadena regular ( %s ), antes de lo cual imprimirá un carácter de hachís y después de lo cual imprimirá una nueva línea.

  • $(</path/to/file.txt) : Se trata de una sustitución de comandos que utiliza una redirección de entrada para suministrarle el contenido de una ruta de archivo. Es equivalente a $(cat /path/to/file.txt) sin tener que llamar a cat .

  • > : Esto redirige la salida del comando anterior, es decir. printf para que se escriba en el archivo en la ruta de archivo especificada. Si las rutas de los archivos contienen espacios, o bien se escapan de cada espacio usando una barra invertida precedente ( \ ), o rodear la ruta del archivo con comillas dobles, asegurándose de que cualquier cosa que quiera que la cáscara se expanda quede fuera de las comillas, por ejemplo. ~/Documents/My\ Massive\ File.txt o ~/"My Massive File.txt"

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X