Morge arquivos de texto da CLI com ordem de classificação e raiz

Morge arquivos de texto da CLI com ordem de classificação e raiz

Tenho uma série de arquivos txt, cada um com inúmeras entradas. Eu normalmente mesclo todos os arquivos txt em um arquivo de saída usando cat, mas fica um pouco confuso porque não posso ter certeza de qual arquivo txt original ele veio.

Eu queria saber se existe uma maneira, usando a linha de comando, de primeiro mesclar todos os arquivos txt em ordem alfabética e ao mesmo tempo adicionar o sufixo à entrada original para anotar o arquivo de onde ele veio.

Por exemplo, digamos que eu tenha 2 arquivos txt, cada um com três entradas:

Arquivo_Um:

  Alpha
  Bravo 
  Charlie

Arquivo_Dois:

  Alpha
  Bravo
  Delta

O que eu gostaria de fazer é o seguinte:

  1. Mesclar as duas listas em um arquivo txt de saída classificado em ordem alfabética;
  2. Adicione o sufixo para mostrar de qual lista ele vem:

       Alpha_File_One
       Alpha_File_Two
       Bravo_File_One
       Bravo_File_Two
       Charlie_File_One
       Delta_File_Two
    

Isso é possível?

Responder1

Como diz Florian, você deve primeiro adicionar o nome do arquivo e depois classificar. Outro método é usar 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 em um formato especificado, %s_%s\nou seja, duas strings separadas _e seguidas por uma nova linha. $0e FILENAMEcontém a linha atual e o nome do arquivo, respectivamente. Nomeei os arquivos f1e f2, neste exemplo.

Responder2

Você precisa fazer o contrário: primeiro adicione o sufixo, depois mescle e classifique:

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

informação relacionada