Bash und ein Problem mit einem Blank

  • Hallo

    Aus einer großen *.csv Datei soll ein Script für 4 Länder einzelne *.csv Dateien erzeugen.

    Das Problem ist das Blank bei "United States"

    Code
    #!/usr/bin/bash
    for land in Germany Belgium "United States" Sweden
    do
    (head -n 1 owid-covid-data.csv; grep -F $land owid-covid-data.csv) > ${land}.csv
    done

    Das Script erzeugt die Germany.csv, Belgium.csv, Sweden.csv die Fehlermeldung lautet

    ./listing6.sh: Zeile 4: ${land}.csv: Mehrdeutige Umlenkung.

    Wie kann das gelöst werden.

    • Best Answer
    Code
    #!/usr/bin/bash
    
    # Debugging
    set -x
    
    for land in Germany Belgium "United States" Sweden; do
        #                                       v     v                        v         v
        (head -n 1 owid-covid-data.csv; grep -F "$land" owid-covid-data.csv) > "$land.csv"
    done

    Schau mal, was dabei rauskommt :)


    Der Landesname muss, wenn "Leerzeichen drin sind" auch mit Hochkomma umschlossen werden.

  • Das Problem ist das Blank bei "United States"

    Das Problem hat aber nicht die bash, denn z. B.:

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • das echo ist ja nicht das Problem, sondern die Umleitung:

    Code
    > ${land}.csv

    ergibt

    Code
    > United States.csv

    wohingegen

    Code
    > "${land}.csv"

    das ergibt

    Code
    > "United States.csv"
  • das echo ist ja nicht das Problem, sondern die Umleitung:

    ... und die Umleitung ist ja nicht die bash.

    echo soll ja nur zeigen, dass es in der bash auch mit einem blank geht. ;)

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • Man kann es ja einfach auch ohne Quelldatei testen und die Fehlermeldunge zu owid-covid-data.csv ignorieren. Dann kommt folgendes bei raus:

    und United States.csv wird nicht erstellt.


    //Edit

    Der Weg von KKoPi bringt diesen Fehler nicht und United States.csv wir erstellt. ;)

  • Die Anführungszeichen weglassen und das Leerzeichen mit einem Backslash maskieren hilft nicht?

    Nein, bringt mir den selben Fehler.


    Es funktioniert nur so:

    Bash
    #!/usr/bin/bash
    
    # Debugging
    set -x
    
    for land in Germany Belgium "United States" Sweden
    do
        #                                                                    v           v
        (head -n 1 owid-covid-data.csv; grep -F "$land" owid-covid-data.csv) > "${land}.csv"
    done

    dann habe ich die Ausgabe

  • das echo ist ja nicht das Problem, sondern die Umleitung:

    Code
    > ${land}.csv

    ergibt

    Code
    > United States.csv

    wohingegen

    Code
    > "${land}.csv"

    das ergibt

    Code
    > "United States.csv"

    Danke der Code und die Erklährung dazu sind ein Volltreffer es läuft damit wie im L-User beschrieben.

  • md_fg

    Selected a post as the best answer.
  • md_fg

    Selected a post as the best answer.