Quiero obtener todas las líneas de un texto en una sola línea. Soy un principiante en la codificación tratando de aprender haciendo. He pasado cuatro horas tratando de resolver este problema. Sé que hay una solución simple para este problema. Esto es lo que he estado intentando.
sed -e 'N; s / \ n //' myfile.txt #No hace nada sed -e: a -e N -e 's / \ n / /' -e ta myfile.txt #outout todo en mal estado y no puedo hacer la cabeza ni la cola de la sintaxis gato myfile.txt | tr -d '\ n'> myfile.txt # Elimina todas las líneas
Aquí está el archivo de texto:
500212 262578-4-4 23200 GRIFFITH LABORATORIES LTD GRIFFITH LABORATORIES CONSEJO DEL CONDADO DE DUBLÍN DEL SUR OFICINA OFICINA (INDUSTRIAL) Lista valorable 2 Polígono industrial de Pineview Firhouse Road Knocklyon 31 dic 2007 01 ene 2008 "
No puedo entender dónde me he equivocado ...
cat reval_details.asp?Pno=500211.txt | tr -d '\n' > new_reval_details.asp?Pno=500211.txt
tr -d '\n' <input.txt > output.txt
: evitar el uso inútil del gato y usar una tubería menos innecesaria.Aquí está. Es otra solución y simple, fácil.
fuente
echo `cat Input.txt` > Output.txt
también funciona, solo otra variantetr
solución.MÉTODO SIMPLE
Otro método usando awk,
Salida:
Nota:
ORS = '' -> Este es su separador de campo, puede tener cualquier carácter entre comillas simples como separador de campo. Usando este método awk podemos incluir espacios y todos los caracteres.
Espero que esto pueda ayudar!
fuente
man awk
No es necesario poner la etiqueta
:a
fuera de la instrucción principal, tampoco se-e
necesita la opción necesaria; finalmente, el/$/
es superfluo (cada línea tiene un carácter EOL).Mejorando otras respuestas, uno obtiene
Lo cual es más claro si se escribe de la siguiente manera,
El comando funciona de la siguiente manera:
N
agrega la siguiente línea al espacio de patrón (multilínea), que ya contiene la línea actual;s/\n/ /
sustituya el carácter de nueva línea\n
generado porN
con un espacio;
ta
va a la línea del script que sigue a la etiqueta:a
, siempre y cuando la sustitución en el paso 2 haya sido exitosa , es decir , si la sustitución se produjo, la ejecución salta al paso 1 sin "presionar" el final del script, es decir , sin leer otra línea de entrada.Tenga en cuenta lo siguiente;
sed
lee las líneas del archivo de entrada una por una en orden, comenzando desde la primera línea ;:a
es solo una etiqueta, no un comando a ejecutar;N
es, en principio, ejecutado en cualquier línea, peros/\n/ /
(en principio ejecutado en cualquier línea) tiene éxito en cualquier línea que no sea la última , entoncesta
hace que el final del script sea accesible solo cuando se lee la última línea de entrada (la única línea dondes
falla), por lo quep
se ejecuta el comando implícito .Entonces, el script básicamente lee en la primera línea de entrada y sigue agregando las siguientes líneas una por una, sustituyendo cada vez la nueva línea con un espacio; después de que se agregue la última línea (y se
\n
cambie en un espacio),N
no se puede agregar ninguna línea,s
falla,ta
se omite, se alcanza el final del script yp
se ejecuta la instrucción rint implícita en el espacio de patrón de 1 línea looong actual .La
-i
opción sustituye el archivo de entradafile
con todo el espacio de patrón de 1 línea.fuente
GEDIT:
Buscar y reemplazar
\n
con un espacio ''.Puede obtener la ventana de reemplazo yendo a 'Buscar' -> 'Reemplazar'
o mediante el acceso directo keybpard Ctrl+H
Ver captura de pantalla a continuación:
Su texto original está en las líneas 1-14.
El resultado está en la línea 16.
fuente
Creo que la forma más fácil de hacer esto es:
http://ss64.com/bash/paste.html
fuente
Prueba esto
http://anandsekar.github.io/joining-all-lines-in-a-file-using-sed/
fuente
Creo que simplemente estaba olvidando que necesitaba decirle a sed que redirija la salida de yourfile.txt al resultado deseado, newfile.txt. Este parece ser el comando que necesita, pero sólo si los archivos que están tratando de fusión no son demasiado grandes para los búferes de sed:
sed -e :a -e N -e 's/\n/ /' -e ta yourfile.txt >newfile.txt
. Acredite a otro foro aquí , donde discuten las capacidades de sed. He probado el comando y funcionó para mí.fuente
-i
interruptor modificará el archivo original en línea , por lo que no hay necesidad de enviarlo a otro archivo. ¡Pero ten cuidado!a' sed -i :a -e N -i 's/\n/ /' -e ta reval_details.asp?Pno=500214.txt sed: can't find label for jump to
' sed -e: a -e N -i 's / \ n / /' -e ta reval_details .asp? Pno = 500214.txt sed: no se puede leer s / \ n / /: No existe tal archivo o directorio #Cualquier idea.Solución pura de bash:
fuente
Si fuera yo, lo abriría en vim y presionaría Shift+ Jvarias veces.
fuente
Escriba dentro de vim y presione Entrar:
fuente
Enfoque de Python:
AWK:
fuente