Como combinar duas saídas de comando linha por linha? [duplicado]

1

digamos que eu tenha esses dois comandos:

$ cat file1
file1_a
file1_b
file1_c
file1_d

E:

$ cat file2
file2_a
file2_b
file2_c
file2_d

Como posso combinar essas saídas usando um separador personalizado (por exemplo, ... ) para obter a seguinte saída:

$ # some fancy command like { cat file1 & cat file2 } | combine --separator='...'
file1_a...file2_a
file1_b...file2_b
file1_c...file2_c
file1_d...file2_d

?

    
por user3019105 25.07.2016 / 23:48

3 respostas

3

Eu gosto de usar o comando paste .

paste -d. file1 - - file2 < /dev/null

produz saída desejada

file1_a...file2_a
file1_b...file2_b
file1_c...file2_c
file1_d...file2_d  

- refere-se a stdin, usamos isso duas vezes para triplicar nossos pontos </dev/null é usado porque não queremos nada entre esses pontos.

    
por 25.07.2016 / 23:55
1

Se você paste dois arquivos serão delimitados por um tabulador. Então, basta substituir o tabulador pelo seu separador desejado:

$ paste file1 file2 | sed -e 's/\t/.../'

Se o seu conteúdo tiver um tabulador, crie um novo separador que não ocorra como%:

$ paste -d% file1 file2 | sed -e s/%/.../
    
por 26.07.2016 / 00:39
0

Esta é a resposta do @ zacharybrady, mas para ser mais parecido com o que você pediu. É termos de processos de entrada. Isso eu acho que você vai estender.

paste -d. <(cat file1) - - <(cat file2) < /dev/null

Obrigado a @zacharybrady pelo pouco que eu estava presa. Eu tinha chegado a este join <(cat -n file1) <(cat -n file2) | cut -d" " -f2- , como eu tinha esquecido sobre paste . Eu não consegui acertar o separador de campo.

Nota: Descobri que paste não é compatível com utf-8. Ele processa apenas o primeiro byte após o -d , portanto, -d… está corrompido. (Eu estou usando o debian jessie, cole (GNU coreutils) 8.23)

    
por 26.07.2016 / 00:24