Bashban beolvasok egy filet és utána a beolvasott számokat hogyan lehet összegezni?
mintafile.txt
20 43 74
26 82 22
14 40 26
es az eredmeny legyen: 137 130 80
tehát soronként összegezzen a program.
A bash proramom:
#!/bin/bash
if [ $# -lt 1 ]
then
echo "Nincs parameter! A program kilep."
exit 1
fi
if ! [ -f "$1" ]
then
echo "Nincs file! A program kilep."
exit 2
fi
if ! [ -r "$1" ]
then
echo "Nincs file olvasási jogod! A program kilep."
exit 3
fi
#Beolvas
falj=$1
cat $falj | while read line; do
echo $line
done
A paraméterrel olvas be, és mükszik a beolvasás de összegezni nem tudok ime egy proba:
for i in `seq 1 $line` ; do
#{tomb[$i]}=`expr $s \+ $i`
s=`expr $s \+ $i`
echo "osszeg2" $s
done
c++-ban így néz ki a kód:
és ott működik :)
Köszi a válaszokat!
Köszi szépen ment a zöld pacsi!
Viszont ha futtatom az expr-re hibát ír:
expr: nem egész argumentum ezt a hibát jelzi :(
@1: "`echo $line`"
A backtick használata antipattern. Helyette a $(echo $line) ajánlott.
Illetve a expr helyett is inkább a bc-t láttam, ha nagyon a bash-sel akar valaki számolni: sum=$(echo $sum + $i | bc -l )
Az expr azért sem jó, mert pl. float számokkal elhasal. A bc nem szereti a scientific notation-t (1.2e3), ezért én awk-ot használnék.
Kb ez:
echo -e "20 43 74\n26 82 22\n14 40 26" | awk '{ sum = 0; for(i = 1; i <= NF; i++) { sum += $i; } print sum }' | tr "\n" " "
#5: Ne zavard össze a kérdezőt!
"A backtick használata antipattern."
A Bash-ben mind a kettő forma használható:
"Illetve a expr helyett is inkább a bc-t láttam, ha nagyon a bash-sel akar valaki számolni"
A példában szereplő egész számok összeadásához bőven elegendő.
"A Bash-ben mind a kettő forma használható"
Tudom, hogy használható. Azt mondtam, hogy kerülni kellene a használatát. [link]
"A példában szereplő egész számok összeadásához bőven elegendő."
De azt csak feltételezed, hogy a negyedik sorban sem lesz float. Vagy holnap esetleg a kérdező nem találja szembe magát egy olyan feladattal, hogy float-ot is össze kell adni.
Szerintem nem zavartam össze a kérdezőt, egyszerűen alternatívát kínáltam, és ezen túl felvetett más nézőpontokat (Mennyire robosztus a kód, vagy elhasal egy float-tól? A sok lehetésges megoldás közül valóban a legjobbat választom ki?).
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!