
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:
- Fusione las dos listas en un archivo de texto de salida ordenado alfabéticamente;
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
printf
imprime argumentos en un formato específico, %s_%s\n
es decir, dos cadenas separadas _
y seguidas por una nueva línea. $0
y FILENAME
contienen la línea actual y el nombre del archivo respectivamente. He nombrado los archivos f1
y 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