staging.inyokaproject.org

Schleife zum Iterieren eines Arrays "friert" ohne Fehlermeldung ein

Status: Gelöst | Ubuntu-Version: Ubuntu 22.04 (Jammy Jellyfish)
Antworten |

Wolfmann

Anmeldungsdatum:
7. Oktober 2018

Beiträge: 352

Hallo,

weiß jemand, warum diese Schleife nicht funktioniert?

1
2
3
4
for line in "${kept_lines[@]}"; do
             echo "Verarbeietete Zeile: $line"
             sed -n "/$line/p" >> neu2.txt
             done

Also mit dem ersten Arrayelement wird der echo befehl ausgeführt aber dann "hängt" es. Also keine Fehlermeldung, kein Prompt, es läuft einfach nicht weiter.

Vielen Dank schonmal für eure Hilfe.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Mein Verdacht ist, dass es in Zeile 3 schief geht. Ich vermute, da ist irgendwas in $line, das den sed-Befehl zerstört. Führ das ganze doch mal mit der Shell-Option -x aus, also, indem Du z.B. am Anfang folgende Zeile einfügst:

1
set -x

Das ist insbesondere wahrscheinlich, falls $line Dateipfade enthält. Robuster ist das so:

1
2
3
4
for line in "${kept_lines[@]}"; do
  echo "Verarbeietete Zeile: $line"
  fgrep -e "$line" >> neu2.txt
done

Wolfmann

(Themenstarter)

Anmeldungsdatum:
7. Oktober 2018

Beiträge: 352

Danke dir erstmal. Das set -x am Anfang des Skriptes oder vor besagter Schleife? Das mit dem fgrep teste ich mal.

Wolfmann

(Themenstarter)

Anmeldungsdatum:
7. Oktober 2018

Beiträge: 352

also mit dem fgrep ist das gleiche phänomen. Keine Ahnung was da los ist. Habe auch mal der Variable einen anderen Namen gegeben - ohne Erfolg

CarstenHa

Avatar von CarstenHa

Anmeldungsdatum:
1. Mai 2020

Beiträge: 154

Hallo,

du hast bei dem sed-Befehl keine Datei angegeben, die ausgewertet werden soll. Das müsste dann eher so aussehen:

1
sed -n "/$line/p" <auszulesendedatei.txt >>neu2.txt

Aber es kann auch sein, das du gar keine Schleife brauchst:

1
sed -n '/suchwort1\|suchwort2\|suchwort3/p' <eingabedatei.txt >neu2.txt

reicht vielleicht schon.

Gruß und frohe Ostern

Carsten

Wolfmann

(Themenstarter)

Anmeldungsdatum:
7. Oktober 2018

Beiträge: 352

CarstenHa schrieb:

Hallo,

du hast bei dem sed-Befehl keine Datei angegeben, die ausgewertet werden soll. Das müsste dann eher so aussehen:

1
sed -n "/$line/p" <auszulesendedatei.txt >>neu2.txt

Aber es kann auch sein, das du gar keine Schleife brauchst:

1
sed -n '/suchwort1\|suchwort2\|suchwort3/p' <eingabedatei.txt >neu2.txt

reicht vielleicht schon.

Gruß und frohe Ostern

Carsten

Super, das war es. Manchmal sieht man vor lauter Bäumen den Wald nicht mehr. Dir ebenfalls schöne Ostern

Antworten |