No bash, como combinar a saída de dois comandos e anexá-los na mesma linha de um arquivo?

0

Por exemplo, eu tenho dois comandos aqui:

{ command1 & command2; } >> file1

Por exemplo, a saída de command1 é 400 e a saída de command2 é 4 .

Então é isso que eu recebo:

400
4

Eu quero que as saídas dos dois comandos sejam adicionadas na linha same da seguinte forma:

400 4
    
por Galaxy 06.05.2016 / 23:28

2 respostas

1

Seu comando é basicamente isso.

$ (echo '400'  && echo '4') | hexdump -C
00000000  34 30 30 0a 34 0a                                 |400.4.|
00000006

A saída não inclui o final da linha \n aka 0a caracteres. Então, uma coisa fácil que você pode fazer é canalizar isso através de um comando que irá apagar o \n .

Então, algo assim

$ (echo '400'  && echo '4') | tr '\n' ' ' | hexdump -C
00000000  34 30 30 20 34 20                                 |400 4 |
00000006

Qual tem saída real de 400 4 . Mas isso não inclui quaisquer finais de linha, então você pode querer apenas remover a linha que termina no primeiro comando.

$ (echo '400' | tr '\n' ' ' && echo '4') | hexdump -C
00000000  34 30 30 20 34 0a                                 |400 4.|
00000006

De qualquer forma, o ponto é que a linha final é apenas um caractere de uso tr, sed, awk ou sua ferramenta favorita que permite manipular a string.

Uma outra opção que pode funcionar, dependendo dos seus requisitos, pode ser algo como abaixo. Com isso, a saída dos comandos são magicamente removidos do EOL para você, mas um EOL é anexado pelo comando echo.

$ echo "$(echo '400') $(echo '4')" | hexdump -C
00000000  34 30 30 20 34 0a                                 |400 4.|
00000006
    
por 06.05.2016 / 23:33
1

Eu usaria paste

{ command1 & command2; } | paste -d" " -s >> file1

(a preocupação sobre o comando backgrounding foi anotada)

Demo:

$ { echo 400; echo 4; }
400
4
$ { echo 400; echo 4; } | paste -d" " -s
400 4
    
por 07.05.2016 / 00:15