Dan Cordos
Dan Cordos

Reputation: 3

Bash Scripting : edit output of a variable

I read some data out of a file, used grep for the only two columns needed, and redirected the output into a variable.

My script looks like this:

#!/bin/bash
cat hosts.cfg | grep 'address\|host_name' | sed -e 's/\<address\>//g'  | while read line; do
        echo $line | sed 's/host_name//g' | sed -r 's/\s+//g' ;
done

The output looks something like this now:

Host1
xx.xx.xx.xx
Host2
xx.xx.xx.xx

The problem is that hosts and ips must be saved into an array, not a file!

Output must look like this:

Host1(tab)xx.xx.xx.xx

Host2(tab)xx.xx.xx.xx

Upvotes: 0

Views: 316

Answers (4)

Ranjithkumar T
Ranjithkumar T

Reputation: 1956

You can use "set" to get faster output

exg:

I have file best2,

 # cat best2
 Host1 xx.xx.xx.xx Host2 xx.xx.xx.xx

make a script called: tabcheck.sh

 # cat tabcheck.sh
 #!/bin/bash
 out=$(cat best2)
 set $out
 echo -e "$1\t$2\n$3\t$4"

 # ./tabcheck.sh
 Host1   xx.xx.xx.xx
 Host2   xx.xx.xx.xx

If you use shift command(Usually only nine command line arguments can be accessed using positional parameters. The shift command gives access to command line arguments greater than nine by shifting each of the arguments.) as well.

Thanks.

Upvotes: 0

micheal.yxd
micheal.yxd

Reputation: 128

using sed 'N;s/\n/\t/g'

change

Host1
xx.xx.xx.xx
Host2
xx.xx.xx.xx

to

Host1(tab)xx.xx.xx.xx
Host2(tab)xx.xx.xx.xx

Upvotes: 0

Jon Cairns
Jon Cairns

Reputation: 11951

You can use awk:

echo $output | awk 'NR%2{printf $0"\t";next;}1'

To save any command output, wrap it in backticks, or the newer (but less backward compatible) $(command) style substitution. E.g.:

result=`echo $output | awk 'NR%2{printf $0"\t";next;}1'`

Upvotes: 0

Jan Hudec
Jan Hudec

Reputation: 76276

You are looking for process substitution. $(command), or old-style in `s.

(sorry, the description of how it should work is not clear enough for me to show modified version of your code)

Upvotes: 1

Related Questions