zeichen in Datei per Terminal ersetzen

D

dezibelkarate

Registriert
Thread Starter
Dabei seit
23.10.2017
Beiträge
2
Reaktionspunkte
0
Hallo MacUser community,

Das ist mein erster Beitrag bei euch nachdem ich eher in euren Foren geleecht habe, allerdings habe ich gerade ein konkretes Problem, zu dessen Lösung ich weder bei euch noch sonst wo im Netz hilfe gefunden habe.
Ich lerne gerade den Umgang mit dem Terminal, allerdings ist meine Vorlage eher für Linux ausgelegt. Ich habe eine Datei mit mehreren Zeilen Zahlen gefüllt und möchte diese addieren.
Das soll in etwa so aussehen
Code:
cat file.txt | paste -sd '+' | bc
Unter Unix geht das auch, habe das mit einer vm getestet. Allerdings ist der paste Befehl unter OS scheinbar etwas anders. Mit
Code:
... paste -s -d '+' file.txt
kann ich zwar nach jeder Zeile ein + Zeichen einfügen und somit alle Zeilen in einer einzigen wiedergeben, danach kann ich aber keine weiteren Kommandos in der Pipeline anfügen. Wenn ich das mache, bekomme ich
Code:
usage: paste [-s] [-d delimiters] file ...
als Fehlermeldung. Da die Zahlen, die ich der .txt file entnehme nicht geändert werden sollen, sieht meine eleganteste Lösung so aus, dass ich zwei Terminal-Befehle ausführe. Ich würde das aber gerne in einem schaffen.
Kann mir jemand etwas zu dem paste-Befehl sagen oder eine Alternative bieten, mit der ich die Zeilenumbrüche durch + Zeichen ersetze und diese direkt addiere?

Dies ist, wie gesagt, mein erster Beitrag bei euch. Ich hoffe das Problem ist nicht allzu dämlich und meine Formatierung ist einigermaßen gut.
 
Code:
paste -sd '+' file.txt | bc
#oder
cat file.txt | paste -sd '+' - | bc

sobald du anderes als ganzzahlige verwendest, kommst mit awk eh' nicht weit, ohne ewig rumzuformatieren.
 
Danke euch beiden, es funktioniert jetzt. Mit awk war für mich etwas umständlicher, aber ich werde mir den command bestimmt noch mal genauer anschauen. Olivetti, ich danke dir, dass du das mit paste erklärt hast. Echt blöd, wenn das unter mac minimal anders ist, als bei linux.
 
Zurück
Oben Unten