Combine os arquivos em um [duplicado]

0

Se eu tiver uma pasta com os seguintes nomes de arquivo:

cluster_sizes_0.txt
cluster_sizes_1.txt
cluster_size_2.txt

etc.

Cada arquivo contém uma única coluna de valores.

Existe um comando dentro do Linux para que eu possa combinar todos os arquivos em cluster_all.txt?

A primeira coluna nesse novo arquivo corresponderia a cluster_sizes_0.txt , a segunda coluna seria cluster_sizes_1.txt etc.

Pode haver até 200 arquivos txt de cluster, mas ele é alterado para cada pasta. Eu estou procurando uma maneira de combinar esses arquivos, em vez de copiar cada um por um.

Além disso, preciso garantir que eles sejam colados no arquivo em ordem. Isso pode ter alguns problemas com o sistema de numeração, desde que eu inclua apenas um dígito se abaixo de 10.

Por exemplo:

paste cluster_size.* > cluster_all.txt não os cola na ordem devido à numeração. Como posso corrigir a numeração sem alterar manualmente todos eles?

    
por Jackson Hart 28.07.2018 / 18:59

1 resposta

1

O comando paste mescla as colunas juntas. Então, por exemplo, se nós tivermos esses 3 arquivos, então colar irá criar um bom resultado:

$ cat file_1.txt
1a
1b
1c

$ cat file_2.txt
2a
2b
2c

$ cat file_3.txt
3a
3b
3c

$ paste -d, file_1.txt file_2.txt file_3.txt
1a,2a,3a
1b,2b,3b
1c,2c,3c

Então agora a questão é, realmente, como colocar os arquivos em ordem. Nós podemos trapacear e deixar ls fazer o trabalho para nós

$ ls     
file_1.txt   file_13.txt  file_17.txt  file_20.txt  file_6.txt
file_10.txt  file_14.txt  file_18.txt  file_3.txt   file_7.txt
file_11.txt  file_15.txt  file_19.txt  file_4.txt   file_8.txt
file_12.txt  file_16.txt  file_2.txt   file_5.txt   file_9.txt

$ ls -v
file_1.txt  file_5.txt  file_9.txt   file_13.txt  file_17.txt
file_2.txt  file_6.txt  file_10.txt  file_14.txt  file_18.txt
file_3.txt  file_7.txt  file_11.txt  file_15.txt  file_19.txt
file_4.txt  file_8.txt  file_12.txt  file_16.txt  file_20.txt

$ paste -d, $(ls -v file_*.txt)
1a,2a,3a,4a,5a,6a,7a,8a,9a,10a,11a,12a,13a,14a,15a,16a,17a,18a,19a,20a
1b,2b,3b,4b,5b,6b,7b,8b,9b,10b,11b,12b,13b,14b,15b,16b,17b,18b,19b,20b
1c,2c,3c,4c,5c,6c,7c,8c,9c,10c,11c,12c,13c,14c,15c,16c,17c,18c,19c,20c

Agora, tome cuidado, pois analisar ls normalmente é uma coisa ruim. Se houver algum nome de arquivo inesperado ou caracteres estranhos (por exemplo, espaço em branco, globbing), ele poderá quebrar seu script. Mas se você está confiante de que os nomes dos arquivos são "bons", então isso funcionará.

    
por 28.07.2018 / 19:13