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

1

Eu tenho uma série de arquivos txt, cada um com várias entradas. Eu normalmente mesclar todos os arquivos txt em um arquivo de saída usando cat, no entanto, torna-se um pouco confuso, porque eu não posso ter certeza de qual arquivo txt original veio.

Eu queria saber se existe uma maneira, usando a linha de comando, para 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 veio.

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

File_One :

  Alpha
  Bravo 
  Charlie

File_Two :

  Alpha
  Bravo
  Delta

O que eu gostaria de fazer é isto:

  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?

    
por simple mind 12.10.2015 / 02:48

2 respostas

5

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

printf imprime argumentos em um formato especificado, %s_%s\n significa duas sequências separadas por _ e seguidas por uma nova linha. $0 e FILENAME contêm a linha atual e o nome do arquivo, respectivamente. Eu nomeei os arquivos f1 e f2 , neste exemplo.

    
por muru 12.10.2015 / 03:04
2

Você precisa fazer o inverso: primeiro adicione o sufixo, den merge e sort:

(sed 's/$/_File_One/' File_One; sed 's/$/_File_Two/' File_Two) | sort 
    
por Florian Diesch 12.10.2015 / 02:58