concatena dois arquivos sem adicionar uma nova linha

5

Se eu nano dois arquivos, um dos quais lê 'this' sem eu entrar em uma nova linha, e um deles lê 'is' sem eu inserir uma nova linha, quero poder cat os dois arquivos juntos em algo como 'thisis'.

Em vez disso, as novas linhas são inseridas automaticamente.

alec@ROOROO:~/$ cat test1 test2 > test3
alec@ROOROO:~/$ cat test3
this
is

Então, como posso concatenar dois arquivos sem adicionar uma nova linha?

    
por ixtmixilix 23.04.2012 / 17:59

4 respostas

12

Essas novas linhas finais são adicionadas por nano , não por cat .

Use o parâmetro nano de -L :

-L (--nonewlines)
    Don't add newlines to the ends of files.

Ou o comando nonewlines do .nanorc:

set/unset nonewlines
    Don't add newlines to the ends of files.
    
por 23.04.2012 / 18:07
2

Se isso está acontecendo, você certamente inseriu um caractere de nova linha. cat concatena-os, como sempre acontece. Você pode testar isso usando cat para primeiro escrever e depois concatenar:

cat > file1
# write something
# hit Ctrl+D twice to end file
# repeat steps with file2
cat file1 file2
    
por 23.04.2012 / 18:19
2

cat não adiciona novas linhas. A nova linha já está presente no final de test1 . Isso é normal: um arquivo de texto consiste em uma sequência de linhas e uma linha consiste em uma sequência de caracteres imprimíveis seguida por um caractere de nova linha. Assim, todos os arquivos de texto não vazios terminam com um caractere de nova linha.

Se você tiver dois arquivos de texto e quiser concatená-los juntos, use cat . Você obterá as linhas do primeiro arquivo seguidas pelas linhas do segundo arquivo.

Se você quiser fazer algo mais complicado, viz, juntar a última linha do primeiro arquivo com a primeira linha do segundo arquivo, você precisa de um comando mais complicado. Por exemplo, você pode remover o último caractere do primeiro arquivo e anexar o segundo arquivo. Com o GNU coreutils (ou seja, no Linux não embarcado), você pode fazer isso:

{ <test1 head -c -1 && cat test2; } >test3

ou em dois passos:

<test1 head -c 1 >test3 && <test2 cat >>test3
    
por 24.04.2012 / 01:23
1

Um caminho:

paste -d'
thisis
' test1 test2

Saída:

paste -d'
thisis
' test1 test2
    
por 23.04.2012 / 19:11