Mesclar arquivos de texto ao lado um do outro

1

Eu tenho .txt de dados do espectrômetro com 800 linhas e 5 colunas. E eu quero mesclar cerca de 15 desses arquivos ao lado do outro. Então, o arquivo .txt final deve ter 800 linhas e 75 colunas.

Todos os arquivos .txt são assim:

Wave   ;Sample   ;Dark     ;Reference;Absorbance
[nm]   ;[counts] ;[counts] ;[counts] ;[A.U]
200.00;   34.647;   -0.317;   79.668; 0.35734
201.00;   29.937;  -21.220;   70.385; 0.25357
202.00;   48.826;   -0.527;   99.657; 0.30721
203.00;   43.201;    4.165;  136.775; 0.53103
...

Arquivo desejado:

Wave   ;Sample   ;Dark     ;Reference;Absorbance; Wave   ;Sample   ;Dark     ;Reference;Absorbance
[nm]   ;[counts] ;[counts] ;[counts] ;[A.U];  [nm]   ;[counts] ;[counts] ;[counts] ;[A.U]
200.00;   34.647;   -0.317;   79.668; 0.35734;    200.00;   34.647;   -0.317;   79.668; 0.35734;
201.00;   29.937;  -21.220;   70.385; 0.25357;    201.00;   29.937;  -21.220;   70.385; 0.25357
202.00;   48.826;   -0.527;   99.657; 0.30721;    202.00;   48.826;   -0.527;   99.657; 0.30721
203.00;   43.201;    4.165;  136.775; 0.53103;    203.00;   43.201;    4.165;  136.775; 0.53103

Eu tentei:

cat *.txt > file.txt

Mas isso adiciona .txt arquivos como novas linhas, não como novas colunas.

    
por Adam Srut 09.03.2018 / 09:55

2 respostas

4

Você está procurando o utilitário paste , por exemplo,

paste *.txt > file.txt

Verifique sua página de manual para obter detalhes, principalmente a opção -d para especificar o delimitador.

    
por egmont 09.03.2018 / 10:42
3

Exemplo simples

Eu defino o separador como 'espaço' e elimino vários espaços.

$ cat file-1
ett tu tre
1    2   3
11   22 33
$ cat file-2
fyra fem sex
4     5   6
44   55  66

$ cat file-3
sju atta nio
7      8   9
77    88  99

$ paste file-?
ett tu tre  fyra fem sex    sju atta nio
1    2   3  4     5   6 7      8   9
11   22 33  44   55  66 77    88  99

$ paste -d ' ' file-?
ett tu tre fyra fem sex sju atta nio
1    2   3 4     5   6 7      8   9
11   22 33 44   55  66 77    88  99

$ paste -d ' ' file-? | tr -s ' ' ' '
ett tu tre fyra fem sex sju atta nio
1 2 3 4 5 6 7 8 9
11 22 33 44 55 66 77 88 99

Linha de comando sugerida

Talvez você queira eliminar os espaços? Você quer manter o ponto-e-vírgula como separador. Tente com a seguinte linha de comando

paste -d ';' input-filespec-with-wildcard | sed 's/ //g' > output-file

em que input-filespec-with-wildcard poderia ser *.txt (se os arquivos a serem mesclados forem os únicos arquivos txt no diretório).

Editar (usando os dados reais)

  • Converta os arquivos para o formato de texto unix / linux, CarriageReturn + LineFeed - > LineFeed com dos2unix

  • Remova linhas em branco com o seguinte comando

    for i in *.TXT;do echo sed '/^$/'d "$i" > "${i/.TXT/.txt}";done
    
  • Remova as linhas de cabeçalho com o seguinte comando

    for i in *.txt;do grep ';*;' "$i" > "${i/.txt/.txt1}";done
    

    (as linhas do cabeçalho não contêm pelo menos dois ponto e vírgulas.)

  • Mesclar os arquivos com o seguinte comando

    paste -d ';' *.txt1 | sed 's/ //g' > merged-file.txt
    

Eu li o arquivo mesclado no LibreOffice Calc e usei ponto-e-vírgula como separador. Parece que eu acho que você quer ter. Espero que funcione para você de acordo com essas instruções. Caso contrário, por favor, descreva o seu problema restante e diga-me se você quer que eu faça o upload de 'meu' merged-file.txt .

LibreOffice Calc

Se você quiser fazer isso apenas uma vez, faça manualmente / visualmente no Libre Office Calc, colando os arquivos na planilha. Você pode editar as posições na planilha e remover as linhas, o que cria confusão.

Eu diria que é bastante fácil fazê-lo manualmente no LibreOffice Calc, mas se isso é algo que você fará muitas vezes ou com um grande número de arquivos, é melhor usar e talvez refinar o método de linha de comando .

    
por sudodus 09.03.2018 / 19:17