Tengo un archivo de texto de 2958616 bytes. Cuando ejecuto sort < file.txt | uniq > sorted-file.txt
, obtengo un archivo de texto de 3213965 bytes. ¿Por qué mi archivo de texto ordenado es más grande?
Puede descargar los archivos de texto aquí .
text-processing
wb9688
fuente
fuente
\r\n
terminaciones de línea, mientras que el archivo de entrada tiene\n
terminaciones de línea. Tal vez debería configurar su configuración regional de manera diferente. IntentaLC_ALL=C
delante de cada comando.locale
? ¿Estás seguro de que no creaste el archivo en otro sistema?sed '/^[a-z]*$/d' < file.txt | wc -l
me dio 305 líneas.â ê î ñ ô ö öö û
aquellos que no están en el conjunto ASCII.Respuestas:
Mientras que su archivo original tiene líneas que terminan con
\n
, su archivo ordenado tiene\r\n
. La adición de\r
es lo que cambia el tamaño.Para ilustrar, esto es lo que sucede cuando ejecuto su comando en mi sistema Linux:
Como puede ver, el archivo deducido ordenado es unas pocas líneas más cortas y, en consecuencia, unos pocos bytes más pequeños. Su archivo, sin embargo, es diferente:
Los dos archivos tienen exactamente el mismo número de líneas, pero:
El
sorted-file.txt
que descargué de su enlace es más grande. Si ahora examinamos la primera línea, podemos ver el extra\r
:Que no están presentes en el que creé en Linux:
Si ahora eliminamos el
\r
archivo de su archivo:Obtenemos el resultado esperado, un archivo que es más pequeño que el original, como el que creé en mi sistema:
fuente
\r\n
finales de línea son cosa de Windows.hexdump
lo revela!Su archivo ordenado es más grande porque usa terminaciones de línea de Windows
\r\n
(dos bytes) en lugar de terminaciones de línea de Linux\n
(un byte).¿Podría ser que estaba ejecutando ese comando anterior en Windows usando herramientas como
cygwin
este nuevo subsistema de Linux para Windows 10? ¿O tal vez corriste algo en Wine?fuente