Question

I've got a piece of a script I'm trying to figure out, so maybe its a simple question for someone more experienced out there.

Here is the code:

#!/bin/bash
echo "obase=2;$1" | bc

Used like:

$./script 12

Outputs:

1100

My question is, how can I parse this 4 digit number into separate digits? (to then delimit with cut -d ' ' and input those into an array...)

I'd like to be able to get the following output:

1 1 0 0 

Is this even possible in BASH? I know its easier with other languages.

Was it helpful?

Solution

can use sed

echo "obase=2;$1" | bc | sed 's/./& /g'

or if you prefer longer form:

echo "obase=2;$1" | bc | sed 's/\(.\)/\1 /g'

if your sed supports -r

echo "obase=2;$1" | bc | sed -r 's/(.)/\1 /g'

OTHER TIPS

To print individual digits from a string you can use fold:

s=1100
fold -w1 <<< "$s"
1
1
0
0

To create an array:

arr=( $(fold -w1 <<< "$s") )

set|grep arr
arr=([0]="1" [1]="1" [2]="0" [3]="0")
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top