2016-09-19 5 views
0

Ich versuche, eine bestimmte Anzahl von einem Datensatz in einer Ebene Semikolon zu konvertieren getrennt Textdatei mitBash: Fall Aussage zeigt keinen Unterschied zwischen 1 und 11?

group=$(echo $line | cut -d';' -f6) 

Die möglichen Werte für diese Spalte (6) 1-20 innerhalb des Bereichs sind. Zum Beispiel wenn die Zahl „11“ gefunden wurde, muß ich es konvertieren zu „5a“

  case ${group} in 

     [1]*) 
       group='1a'; 
       echo $group >> "$file" 
     esac 
     ;; 
     [11]*) 
       group='5a'; 
       echo $group >> "$file" 
      esac 
      ;; 

aber jedes Mal wenn ich das Skript ausführen, alle Werte von 10 bis 19 säumigen werden die [1] Schalter. Ich habe versucht, die Schalter wie ["11"] oder ['11'] zu zitieren, ohne Erfolg. Wie werden die 10-19 Werte richtig umgeschaltet?

+0

Ist Ihr Code nicht syntaktisch falsch? Warum hast du zwei Esac? Der erste sollte nicht da sein. – euphoria83

Antwort

4

[11] ist die gleiche wie [1] da es sich um eine Zeichenklasse/Bereich von 1 bis 1.

ist wirklich Sie haben nicht die Platzhalter benötigen, wenn Sie Ihre Werte Zahlen sind: tun nur die Fälle wie folgt aus:

 1) 
      group='1a'; 
      echo $group >> "$file" 
    esac 
    ;; 
    11) 
      group='5a'; 
      echo $group >> "$file" 
     esac 
     ;; 

(und so weiter: Standardfall ist *) BTW)

wenn die Zahlen durch Buchstaben gefolgt waren Sie wie dies tun könnte:

 1[a-z]) 
      group='1a'; 
      echo $group >> "$file" 
    esac 
    ;; 
    11[a-z]) 
      group='5a'; 
      echo $group >> "$file" 
     esac 
     ;; 

Hinweis: Wenn Sie von irgendetwas 11 oder 1 gefolgt passen Sie dies tun können:

 11*) 
      group='5a'; 
      echo $group >> "$file" 
     esac 
     ;; 

    1*) 
      group='1a'; 
      echo $group >> "$file" 
    esac 
    ;; 

(der zweite Fall von 1 wird übereinstimmen, jedoch ausgehend beginnen alle Zahlen nicht durch 11. Beachten Sie, dass ich haben die Fälle umgekehrt, genaueste Übereinstimmung zuerst).

Wählen Sie:

+0

Fabre: Die switch-Anweisung umzukehren, wie Sie vorgeschlagen haben, funktionierte sehr gut für mich – kzpm

+0

Das cool! Da ich die Form Ihrer Tokens nicht kannte, habe ich nur eine erschöpfende Lösung veröffentlicht. –

Verwandte Themen