Extraindo palavras de .txt e criando um mestre .txt

1

Eu tenho vários arquivos .txt que contêm nomes de pessoas classificados em ordem alfabética, por exemplo, no diretório principal eu tenho um diretório que contém um a.txt completo com nomes que começam com "a" como "Anna" "Andrew" etc. A mesma coisa se repete no diretório principal Eu tenho o diretório b contendo b.txt completo com nomes, etc. até x, y, z. Como posso extrair os nomes e criar um master.txt contendo os nomes de todas as pessoas?

    
por Alex 19.11.2017 / 02:52

2 respostas

2

Você pode fazer isso usando o comando cat e expansão de nome de arquivo . Se todos esses arquivos estiverem no diretório de origem /path/to/directory e não houver outros arquivos nesse diretório, o comando mais sucinto será o seguinte:

cat /path/to/directory/*/*.txt > master.txt

Isso criará um arquivo chamado master.txt em seu diretório atual que contém o conteúdo concatenado de todos os arquivos no diretório de origem. NOTA: Isso incluirá todos os arquivos em qualquer um dos subdiretórios do diretório de origem.

Se houver outros arquivos no diretório (ou se você quiser apenas ser um pouco mais preciso), então você pode usar este comando:

cat /path/to/directory/[a-z]/[a-z].txt > master.txt

Isso corresponderá apenas aos seguintes arquivos no diretório de origem:

a/a.txt
a/b.txt
a/c.txt
.
.
.
z/x.txt
z/y.txt
z/z.txt

Se houver outros arquivos no diretório de origem ou se você tiver arquivos semelhantes a a/z.txt , em que o nome do subdiretório não corresponder ao nome base do arquivo e se você quiser excluir esses arquivos, então você teria que usar um comando mais preciso para restringir a lista de arquivos correspondentes. Nesse caso, você poderia usar expansor de chaves e um for-loop :

for letter in {a..z}; do \
    cat "/path/to/directory/${letter}/${letter}.txt"; \
done >> master.txt

Isso corresponderá exatamente aos arquivos especificados em sua pergunta e a outros arquivos.

    
por 19.11.2017 / 03:18
0

Substitua main_dir pelo caminho do seu diretório principal, salve-o em um script e execute a partir do terminal como sh ./script-name.sh

#!/bin/bash
for i in $( cd main_dir && ls ); do
    cat "main_dir/$i/$i.txt" >> "master.txt"
done
    
por 19.11.2017 / 03:23