如何将'echo'输出用作终端中 'seq' 命令的操作数?



我有一个练习,我需要把每个数字加起来,直到一个给定的数字,像这样:

假设我有数字12,我需要做1+2+3+4+5+6+7+8+9+1+0+1+1+1+2

(9之后的数字被分成单独的数字)。11 = 1+ 1,234 = 2+3+4等)

我知道我可以用:

seq -s '' 12

输出123456789101112,然后将它们加在一起,中间加上'+',然后管道到'bc',但我必须特别做:

echo 12 | ...

作为第一步(因为在线IDE将其填充为每个测试用例的不可更改的第一步),当我这样做时,我开始遇到seq

的问题我试着

echo 12 | seq -s '' $1
### or just ###
echo 12 | seq -s '' 

但不能让它工作,因为这只是返回一个丢失的操作数错误为seq(因为我在终端,而不是一个脚本和'12'不只是分配给$1我假设),任何建议如何避免它或如何让seq从echo解释12作为操作数或替代方法去?

seq -s '' $(cat)

完整解决方案:

echo "12" | seq -s '' $(cat) | sed 's/./&+/g; s/$/0/' | bc

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

withoutsed:

d=$(echo 12 | { seq -s '' $(< /dev/stdin); echo; }); echo $(( "${d//?/&+}0" ))
echo 12 | awk '{
cnt=0
for(i=1;i<=$1;i++) {
cnt+=i
printf("%s%s",i,i<$1?"+":"=")
}
print cnt
}'

打印:

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

如果只是数字相加:

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

或POSIX管道:

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

相关内容

  • 没有找到相关文章

最新更新