
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:
- Mesclar as duas listas em um arquivo txt de saída classificado em ordem alfabética;
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
printf
imprime argumentos em um formato especificado, %s_%s\n
ou seja, duas strings separadas _
e seguidas por uma nova linha. $0
e FILENAME
contém a linha atual e o nome do arquivo, respectivamente. Nomeei os arquivos f1
e 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