[TIP] Como eliminar las líneas duplicadas (o encontrar las repetidas) en dos archivos de texto diferentes usando Bash.

A este le puse por título TIP por que no es mas que eso: otro ayuda memoria para la posteridad, a saber:

 

  • Tenés dos archivos con texto: archivo1 y archivo2 como en el ejemplo de la captura de pantalla.
  • Necesitás identificar las líneas duplicadas o simplemente restarlas como en el ejemplo y mostrar únicamente las que no se repiten.

 

La única forma que conozco de lograr esto en Bash sin recurrir a complicados regex de la muerte forma mas rápida de lograr esto sin tener que pensar mucho es como tantas otras veces: GREP.  Alguien debería hacerle un pedestal al autor original de grep, sin duda.

Los switchs que vas a utilizar en grep son:

  1. -x  match únicamente si toda la línea coincide.
  2. -f  para en lugar de utilizar stdin o una palabra como argumento, usar un archivo, de a una línea por vez.
  3. -v  para reverse search, restar las líneas que coincidan en archivo2 de archivo1.

 

Utilizar grep en Bash para restar el contenido de un archivo de otro linea a linea en la consola de comando de Linux

 

Sigue leyendo

[TIP linuxero] como listar el contenido de todos los directorios y subdirectorios en la consola de comandos de Linux, recursivamente, ordenando por fecha.

 

Esta me la paso un capo (gracias estimado), con quien que tuve el privilegio de compartir keys SSH, bajo el título de «one liners endemoniados»: uno de esos one-liners que normalmente cuestan un huevo memorizar por lo complejo de la sintaxis, y que conviene siempre tener a mano en tu coso de agendar todas estas mierdas.

 

A la izquierda Linux, a la derecha Windows. Seamos realistas: algunas cosas en Windows son particularmente fáciles.

Más de una vez te habrá pasado que necesitas ordenar por fecha, saber por ejemplo cuál fue el último archivo modificado. Esta tarea que en Windows es una pavada, una cosa trivial, en Linux es un reverendisimo dolor de huevos (como todo en Linux en realidad, hasta que lo entendiste en lugar de memorizarlo, claro).

Sigue leyendo

[Micro TIP] Como obtener un listado del espacio ocupado desde la consola de Linux ordenado de mayor a menor

Necesitás un listado detallado de cuanto ocupa cada directorio en Linux, y lo necesitás ordenado de mayor a menor. ¿Como? Facil:

root@floyd:~# du /home/pink --max-depth=1 | sort -nr | cut -f2 | xargs -d '\n' du -sh

Que te dará por resultado algo como esto:

  65G     /home/pink
  23G     /home/pink/Descargas
  15G     /home/pink/Documentos
  9,0G    /home/pink/Imágenes
  7,9G    /home/pink/ordenar
  6,6G    /home/pink/videos
  4,0G    /home/pink/Música

Actualización – 13/02/2012: Nitsuga en los comentarios de este post se materializó con una idea bastante mejorcita que combina du con sort únicamente y obtiene el mismo resultado final:

du /home/pink/ --max-depth=1 -h | sort -rh

¡Un aplauso para Nitsuga, che!

Ahora si, a continuación, la explicación de como funciona el método largo e inmemorizable.

¿Como funciona?

Se usa du para obtener el espacio ocupado por cada directorio contenido dentro del que se especificó con un máximo de profundidad de 1 nivel (por lo de –max-depth=1) y se le pasa el resultado al comando sort por medio de un pipe.

Sort se encargará de ordenar numéricamente (por lo de –n) y de forma inversa, es decir de mayor a menor (por lo de –r) el resultado obtenido, que se le pasa al comando cut por medio de otro pipe.

Cut deja solamente el contenido del segundo campo y se deshace del resto (por lo de –f2), es decir, ahora que ya está ordenado, se deshace del número y deja solamente el nombre del directorio o archivo en cuestión.

Otro pipe de por medio, xargs va ejecutando du –sh sobre cada uno de los directorios pre ordenados y mostrando el resultado en pantalla usando para delimitar un un argumento de otro el el salto de línea, (por lo de –d ‘\n’).

¿Lo entendiste?

Si lo entendiste te felicito, yo lo tuve que pensar bastante cuando lo ví usar por primera vez (No, no es de mi autoría).

Si no lo entendiste y no tenes ganas o tiempo de entenderlo ya mismo, acordate: Lo viste en Maldito Nerd, o agendate esta página en tus bookmarks, que si te pasa como a mi, lo vas a necesitar un par de veces al año y no te vas a acordar de como carajo era todo el comando.

¿Y si uso Windows en vez de Linux pero igualmente quiero hacerlo por consola?

Bueno, no se puede logar exactamente el mismo resultado pero algo muy parecido se obtiene ejecutando:

dir /S /O-S

Si, así de cortito. Eso demuestra a las claras la superioridad de Windows sobre Linux. No necesito mas pruebas. (Cualquier parecido entre las opciones que le paso al comando dir y la llamada internacional de auxilio es pura coincidencia).