1

For example I have two commands here:

{ command1 & command2; } >> file1

For example the output of command1 is 400, and the output of command2 is 4.

So this is what I get:

400
4

I want the outputs of the two commands to be appended on the same line like this:

400 4
Galaxy
  • 233
  • 2
  • 6
  • 12

2 Answers2

3

Your command basically is this.

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

Not the output includes the end of line \n aka 0a characters. So one easy thing you could do is pipe that through a command that will delete the \n.

So something like this

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

Which has actual output of 400 4. But that doesn't include any line endings so you may want to only remove the line ending from the first command.

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

Anyway, the point is that the line ending is just a character use tr, sed, awk, or your favorite tool that lets you do manipulation of the string.

One other option that may work, depending on your requirements may be to do something like below. With this, the output of the commands are magically stripped of the EOL for you, but an EOL is appended by the echo command.

$ echo "$(echo '400') $(echo '4')" | hexdump -C
00000000  34 30 30 20 34 0a                                 |400 4.|
00000006
Zoredache
  • 20,438
1

I'd use paste

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

(concern about backgrounding command1 has been noted)

Demo:

$ { echo 400; echo 4; }
400
4
$ { echo 400; echo 4; } | paste -d" " -s
400 4
glenn jackman
  • 27,524