Morge archivos de texto desde CLI con orden de clasificación y raíz

Morge archivos de texto desde CLI con orden de clasificación y raíz

Tengo una serie de archivos de texto, cada uno con numerosas entradas. Por lo general, fusiono todos los archivos txt en un archivo de salida usando cat, sin embargo, se vuelve un poco complicado porque no puedo estar seguro de qué archivo txt original proviene.

Me preguntaba si hay alguna manera, usando la línea de comando, de fusionar primero todos los archivos de texto en orden alfabético y al mismo tiempo agregar el sufijo a la entrada original para anotar el archivo de donde proviene.

Por ejemplo, digamos que tengo 2 archivos txt, cada uno con tres entradas:

Archivo_uno:

  Alpha
  Bravo 
  Charlie

Archivo_dos:

  Alpha
  Bravo
  Delta

Lo que me gustaría hacer es esto:

  1. Fusione las dos listas en un archivo de texto de salida ordenado alfabéticamente;
  2. Agregue el sufijo para mostrar de qué lista proviene:

       Alpha_File_One
       Alpha_File_Two
       Bravo_File_One
       Bravo_File_Two
       Charlie_File_One
       Delta_File_Two
    

es posible?

Respuesta1

Como dice Florian, primero debes agregar el nombre del archivo y luego ordenarlo. Otro método es utilizar awk:

$ awk '{printf "%s_%s\n", $0, FILENAME}' f1 f2 | sort
Alpha_f1
Alpha_f2
Bravo_f1
Bravo_f2
Charlie_f1
Delta_f2

printfimprime argumentos en un formato específico, %s_%s\nes decir, dos cadenas separadas _y seguidas por una nueva línea. $0y FILENAMEcontienen la línea actual y el nombre del archivo respectivamente. He nombrado los archivos f1y f2, en este ejemplo.

Respuesta2

Debe hacerlo al revés: primero agregue el sufijo, luego combine y ordene:

(sed 's/$/_File_One/' File_One; sed 's/$/_File_Two/' File_Two) | sort 

información relacionada