所以我們有一個測驗檔案,每行有一個 3 位數字,檔案中有幾百行。
我需要找到一種方法從檔案中讀取數字(或組成數字的 3 位數字),將它們加在一起,然后確定結果總和是奇數還是偶數。我當前的腳本正在讀取每一行作為一個整數,我錯過了我能夠對數字求和的部分......
while read number
do
echo $number
if [ $((number % 2)) -eq 0 ]; then
echo even
else
echo odd
fi
done < input.txt
uj5u.com熱心網友回復:
設定:
$ cat input.txt
123
456
789
假設結果需要用于后續操作,那么一個bash
想法是:
while read -r in
do
sum=$(( ${in:0:1} ${in:1:1} ${in:2:1} ))
result="odd"
[[ $((sum%2)) -eq 0 ]] && result="even"
echo "${in} : ${sum} : ${result}"
done < input.txt
這會產生:
123 : 6 : even
456 : 15 : odd
789 : 24 : even
如果唯一目的是生成even/odd
標志,并且性能是一個目標,那么您將需要查看除 之外的其他內容bash
,例如:
awk '
{ sum=0
for (i=1;i<=length($1);i )
sum =substr($1,i,1)
result=(sum%2 == 0 ? "even" : "odd")
printf "%s : %s : %s\n",$1,sum,result
}
' input.txt
這會產生:
123 : 6 : even
456 : 15 : odd
789 : 24 : even
uj5u.com熱心網友回復:
可能是這樣的。
#!/usr/bin/env bash
while IFS= read -r numbers; do
[[ $numbers =~ ^([[:digit:]]{1})([[:digit:]]{1})([[:digit:]]{1})$ ]] &&
arr=("${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}" "${BASH_REMATCH[3]}")
sum=$(IFS= ; printf '%s' "${arr[*]}")
if (( $((sum)) % 2 == 0)); then
printf '%s is %d %% 2 = 0 is even\n' "$sum" "$((sum))"
else
printf '%s is %d %% 2 = 0 is odd\n' "$sum" "$((sum))"
fi
done < file.txt
檔案中有幾百行。
Bash 不是這個工具,它可以用 shell 來完成,但它會很慢,而且記憶體密集,使用類似awk
or perl
or 的東西......
uj5u.com熱心網友回復:
只需更換
$((number % 2))
和
$(( (number/100 number/10%10 number%10) % 2))
在你的代碼中。假設number
由三位十進制數字組成,number/100
提取最高有效數字,number/10
提取中間數字,并number
提取最低有效數字。請注意,shell 算術只是整數,并且運算子/
和%
具有相同的優先級并且是左關聯的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/520790.html
標籤:重击