簡體   English   中英

在Bash腳本中找到一串數字的總和?

[英]Find the sum of a string of numbers in Bash scripting?

到目前為止,我有這個腳本:

#!/bin/sh
echo type in some numbers:
read input

從這里開始,我被困住了。 假設input=30790148 我想做的是將所有這些整數加起來得到3 + 0 + 7 + 9 + 0 + 1 + 4 + 8 = 32。 我該怎么做?

不使用外部工具的另一種方法:

read -p "Type some number: " num
for((i=0;i<${#num};i++)); do ((sum+=${num:i:1})); done

echo "$sum"

有兩個核心實用程序foldpaste ,您可以在此處使用(為input=12345 ):

fold -w1 <<< $input | paste -sd+ - | bc
  • fold -w1將輸入行fold -w1 1個字符的寬度:

     $ fold -w1 <<< $input 1 2 3 4 5 
  • paste -sd+ -按順序將輸入( -s )合並,即使用+分隔符( -d+ )合並為一行,並從標准輸入中讀取(最后一個- ;對於GNU paste可選的):

     $ fold -w1 <<< $input | paste -sd+ - 1+2+3+4+5 
  • bc然后計算總和:

     $ fold -w1 <<< $input | paste -sd+ - | bc 15 

這個awk單線可能會幫助您:

awk '{for(i=1;i<=NF;i++)s+=$i}END{print s}' FS="" <<< yourString

例如:

kent$  awk '{for(i=1;i<=NF;i++)s+=$i}END{print s}' FS=""<<< "123456789" 
45     

這個使用sedbc

echo "12345" | sed -e 's/\(.\)/\1\+0/g' | bc

盡管+0不直觀,但還是有點駭人聽聞

編輯:使用&從@PaulHodges的答案,這將縮短為:

echo "12345" | sed 's/./&+0/g' | bc

sedbc

input=30790148; echo $input | sed 's/[0-9]/&+/g; s/$/0/;' | bc

如果您沒有GNU sed ,則可能需要換行命令而不是使用分號。

input=30790148;
echo $input | 
  sed '
     s/[0-9]/&+/g
      s/$/0/
  ' | bc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM