Home > Blockchain >  How can I use 'echo' output as an operand for the 'seq' command within a termina
How can I use 'echo' output as an operand for the 'seq' command within a termina

Time:01-10

I have an excercise where I need to sum together every digit up until a given number like this:

Suppose I have the number 12, I need to do 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2.

(numbers past 9 are split up into their separate digits eg. 11 = 1 1, 234 = 2 3 4, etc.)

I know I can just use:

seq -s '' 12

which outputs 123456789101112 and then add them all together with ' ' in between and then pipe to 'bc' BUT I have to specifically do :

echo 12 | ...

as the first step (because the online IDE fills it in as the unchangeable first step for every testcase) and when I do this I start to have problems with seq

I tried

echo 12 | seq -s '' $1

### or just ###

echo 12 | seq -s '' 

but can't get it to work as this just gives back a missing operand error for seq (because I'm in the terminal, not a script and the '12' isn't just assigned to $1 I assume), any recommendations on how to avoid it or how to get seq to interpret the 12 from echo as operand or alternative ways to go?

CodePudding user response:

Or

echo 12 | { echo $(( $({ seq -s '' $(< /dev/stdin); echo; } | sed -E 's/([[:digit:]])/\1 /g; s/$/0/') )); }

without sed:

d=$(echo 12 | { seq -s '' $(< /dev/stdin); echo; }); echo $(( "${d//?/& }0" ))

CodePudding user response:

seq -s '' $(< /dev/stdin)

full solution:

echo "12" | seq -s '' $(< /dev/stdin) | sed 's/./& /g; s/$/0/' | bc

CodePudding user response:

echo 12 | awk '{
cnt=0
for(i=1;i<=$1;i  ) {
    cnt =i
    printf("%s%s",i,i<$1?" ":"=")
    }
    print cnt
}'

Prints:

1 2 3 4 5 6 7 8 9 10 11 12=78

If it is supposed to be just the digits added up:

echo 12 | awk '{s=""
                for(i=1;i<=$1;i  ) s=s i 
                split(s,ch,"")
                for(i=1;i<=length(ch); i  ) cnt =ch[i]
                print cnt
}'
51

Or a POSIX pipeline:

$ echo 12 | seq -s '' "$(cat)" | sed -E 's/([0-9])/\1 /g; s/$/0/' | bc
51
  • Related