2016-08-03 8 views
1

Wie ist es möglich, eine optionaleSetzen Sie ein bedingtes Format Konvertierung in einer Folge von verrohrt Shell-Befehle

iconv -f utf-16 -t latin1 

innerhalb einer Folge von verrohrt Befehle hinzufügen?

Die Annahme ist, dass die Quelldatei entweder in latin1 oder in utf16 sein kann.

Shell-Skripts, die awk, grep und ähnliches verwenden, sollten in beiden Formaten arbeiten können, indem Sie einen optionalen Konvertierungsschritt hinzufügen.

Wie könnte das auf die schönste Art und Weise geschehen, unter Beachtung des DRY-Prinzips (die anderen Befehle nicht wiederholen)?

EDITED -

Curent Folge von Befehlen wie folgt aussieht:

awk '...' $1 | cut ... | colorize 
+0

Was meinst du "ein optional". Suchen Sie eine If-Anweisung? Wie sieht die Reihenfolge der Pipe-Befehle aus? – JNevill

+0

Ja, ich schaue mir eine Art if-Anweisung an, so dass $ 1 zuerst in Latein konvertiert wird, wenn es utf-16 ist. Möchte temporäre Dateien vermeiden und einfach (wenn möglich) einen zusätzlichen Schritt in der Befehlsfolge haben. – user3341592

Antwort

1

Nicht gerade effizient, aber die folgenden leicht bedingte Befehle in einer Pipeline einrichtet. Der Trick ist, von verschiedenen alternativen Befehlen zu wählen, so dass Sie immer etwas laufen:

opt_condtion=true; #true run extra command, false not to 

first_command | ($opt_condition && (optional_command || true) || cat) | third_command

Die (optional_command || true) sichert die Katze läuft nicht, wenn optional_command einen von Null verschiedenen Exit-Code als zusätzliche Katze zurück würde wahrscheinlich den Pipeline-Befehl hängen.

Die Verwendung von vollständigen (Subshells) ermöglicht Ihnen eine Menge Freiheit. Wenn die Befehle zu komplex werden, fügen Sie sie in eine Funktion ein, um die Pipeline einfach zu halten.

+0

Der Vollständigkeit halber ist hier (mehr oder weniger) mein Befehl: 'tail -f $ {1} | ([[$ (file -i $ {1}) = ~ utf-16be]] && (iconv -f UTF-16 -t UTF-8 || true) || cat) | awk '...' | Schnitt ... | einfärben – user3341592

Verwandte Themen