Kezdőoldal » Számítástechnika » Programozás » Bashban beolvasok egy filet...

Bashban beolvasok egy filet és utána a beolvasott számokat hogyan lehet összegezni?

Figyelt kérdés

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:

[link]

és ott működik :)


Köszi a válaszokat!



2018. ápr. 22. 18:43
 1/7 anonim ***** válasza:

Ennyi:

[link]

1. Mielőtt végigmegyünk egy soron, az összeget tartalmazó változót állítsuk 0-ra

2. A seq számok sorozatát adja vissza:

[link]

esetünkben nem kell

3. Az összeg kiírását az állomány egy sorának összegzését végző ciklus magján kívül kell megtenni.

2018. ápr. 22. 19:43
Hasznos számodra ez a válasz?
 2/7 A kérdező kommentje:

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 :(

2018. ápr. 24. 13:55
 3/7 anonim ***** válasza:

Pedig a szkript működik (az elejére beraktam egy mintafájl-generálást):

[link]


[link]

2018. ápr. 24. 14:26
Hasznos számodra ez a válasz?
 4/7 A kérdező kommentje:
Nagyon hálásan köszönöm működik! További szép napot és értem is hogy mi a lényeg :)
2018. ápr. 24. 14:52
 5/7 anonim ***** válasza:

@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" " "

2018. ápr. 25. 02:13
Hasznos számodra ez a válasz?
 6/7 anonim ***** válasza:

#5: Ne zavard össze a kérdezőt!


"A backtick használata antipattern."

A Bash-ben mind a kettő forma használható:

[link]


"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ő.

2018. ápr. 25. 02:38
Hasznos számodra ez a válasz?
 7/7 anonim ***** válasza:

"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?).

2018. ápr. 25. 03:04
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!