[英]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"
有兩個核心實用程序fold
和paste
,您可以在此處使用(為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
這個使用sed
和bc
echo "12345" | sed -e 's/\(.\)/\1\+0/g' | bc
盡管+0
不直觀,但還是有點駭人聽聞
編輯:使用&
從@PaulHodges的答案,這將縮短為:
echo "12345" | sed 's/./&+0/g' | bc
與sed
和bc
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.