Estou assumindo que, ao "unir", você quer dizer concatenar e não "executar uma operação JOIN relacional entre eles usando o comando join
". Além disso, presumo que os nomes dos arquivos sigam o padrão file_XN.txt
, em que X
é uma única letra e N
é algum número e que todos os arquivos estão localizados no diretório atual.
Concatenação de arquivos é feita usando o comando cat
, então você teria que chamar cat com todos os " a
-files", depois " b
-files", etc., enquanto escreve a saída para algum arquivo apropriadamente chamado.
for filename in ./file_[a-z]*.txt; do
# extract the letter
letter=${filename#*_} # ./file_XN.txt --> XN.txt
letter=${letter%[0-9]*} # XN.txt --> X
cat "$filename" >>"combined_$letter.txt"
done
Isso faria um loop em todos os arquivos e extrairia a letra do nome do arquivo. A carta seria então usada para construir o nome do arquivo de saída e o conteúdo do arquivo atual seria anexado ao arquivo de saída.
Os dados seriam anexados na mesma ordem em que os arquivos seriam listados no diretório por padrão.
Outra maneira mais curta de fazer isso, se você estiver usando bash
e souber exatamente as letras que deseja passar (usando a
até t
aqui):
for letter in {a..t}; do
cat "file_$letter"*.txt >"combined_$letter.txt"
done
Aqui, em vez de percorrer os nomes dos arquivos, fazemos um loop sobre as letras e, para cada letra, concatenamos todos os arquivos para essa letra de uma só vez.