varios txt separador practicos por lineas linea letras leer insertar fichero examples eliminar ejemplos dividir crear comparar comandos comando columnas campos cadena buscar basicos archivos archivo unix command-line awk tokenize

unix - txt - linux sed insertar linea



¿Cómo dividir un archivo en palabras en la línea de comandos de Unix? (11)

Estoy haciendo pruebas más rápidas para un sistema ingenuo de recuperación de información booleana, y me gustaría usar awk, grep, egrep, sed o thing similar y pipe para dividir un archivo de texto en palabras y guardarlos en otro archivo con una palabra por línea . Ejemplo mi archivo contiene:

Hola mundo, hablo español y no sé si escribí bien la pregunta, ojalá me puedan entender y ayudar Adiós.

El archivo de salida debe contener:

Hola mundo hablo español ...

¡Gracias!


perl -ne ''print join ("/ n", split)''

Lo siento @jsageryd

Esa línea no da la respuesta correcta, ya que une la última palabra en línea con la primera palabra en la siguiente.

Esto es mejor, pero genera una línea en blanco para cada línea en blanco en src. Tubería a través de | sed ''/ ^ $ / d'' para arreglar eso

perl -ne ''{print join ("/ n", split (/ [[: ^ word:]] + /)), "/ n"; } ''


Esta línea awk puede funcionar también?

awk ''BEGIN{FS="[[:punct:] ]*";OFS="/n"}{$1=$1}1'' inputfile


La herramienta más sencilla es fmt:

fmt -1 <your-file

fmt, diseñado para romper líneas para que se ajuste al ancho especificado y si proporciona -1 se rompe inmediatamente después de la palabra. Ver man fmt para la documentación. Inspirado por http://everythingsysadmin.com/2012/09/unorthodoxunix.html


Según sus respuestas hasta el momento, PIENSO que lo que probablemente está buscando es tratar las palabras como secuencias de caracteres separados por espacios, comas, caracteres que terminan en las oraciones (es decir, "." "!" O "?" En inglés) y otros caracteres que NO encontrarías normalmente en combinación con caracteres alfanuméricos (por ejemplo, "<" y ";" pero no '' - # $ % ). Ahora, "." es un carácter de terminación de oración, pero usted dijo que $27.00 debería considerarse una "palabra" . Necesita ser tratado de manera diferente dependiendo del contexto. Creo que lo mismo es probablemente cierto para "-" y tal vez algunos otros personajes.

Así que necesitas una solución que convierta esto:

I have $27.00. We''re 20% under-budget, right? This is #2 - mail me at "[email protected]".

dentro de esto:

I have $27.00 We''re 20% under-budget right This is #2 mail me at [email protected]

¿Es eso correcto?

Intente esto usando GNU awk para que podamos establecer RS ​​en más de un carácter:

$ cat file I have $27.00. We''re 20% under-budget, right? This is #2 - mail me at "[email protected]". $ gawk -v RS="[[:space:]?!]+" ''{gsub(/^[^[:alnum:]$#]+|[^[:alnum:]%]+$/,"")} $0!=""'' file I have $27.00 We''re 20% under-budget right This is #2 mail me at [email protected]

Trate de encontrar otros casos de prueba para ver si esto siempre hace lo que usted quiere.


Una opción muy simple sería primero,

sed ''s,/(/w*/),/1/n,g'' file

ten cuidado, no manejes ni apóstrofes ni puntuación


Utilizando perl :

perl -ne ''print join("/n", split)'' < file


Utilizando sed :

$ sed -e ''s/[[:punct:]]*//g;s/[[:space:]]/+//n/g'' < inputfile

Básicamente esto borra toda puntuación y reemplaza cualquier espacio con nuevas líneas. Esto también asume que su sabor de sed comprende /n . Algunos no lo hacen, en cuyo caso solo puede usar una nueva línea literal (es decir, incrustándolo dentro de sus citas).


Utilizando perl :

perl -pe ''s/(?:/p{Punct}|/s+)+//n/g'' file

Salida

Hola mundo hablo español y no sé si escribí bien la pregunta ojal� me puedan entender y ayudar Adiós


Utilizando tr:

tr -s ''[[:punct:][:space:]]'' ''/n'' < file


grep -o imprime solo las partes de la línea coincidente que coinciden con el patrón

grep -o ''[[:alpha:]]*'' file


cat input.txt | tr -d ",." | tr " /t" "/n" | grep -e "^$" -v

tr -d ",." borra "," y "."

tr "/ t" "/ n" cambia los espacios y las pestañas a nuevas líneas

grep -e "^ $" -v elimina las líneas vacías (en el caso de dos o más espacios)