2016-08-03 10 views
1

コマンドそれはどのようにパイプで連結された一連のコマンド内の任意のパイプシェルの順序で条件付フォーマット変換を入れては

iconv -f utf-16 -t latin1 

を追加することが可能でしょうか?

ソースファイルはlatin1またはutf16のどちらでもかまいません。

awk、grepなどを使用するシェルスクリプトは、オプションの変換手順を追加することで、両方の形式で動作する必要があります。

DRYの原則(他のコマンドを繰り返さない)を尊重しながら、これはどのようにして最も美しい方法で行うことができますか? -

EDITEDコマンドの

海流シーケンスは次のようになります。

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

「オプション」とはどういう意味ですか?あなたはIfステートメントをお探しですか?あなたのパイプコマンドのシーケンスはどのように見えますか? – JNevill

+0

はい、何らかのif文を見て、$ 1がutf-16のときに最初にlatinに変換されるようにします。一時ファイルを避け、(可能であれば)一連のコマンドに1つの余分なステップを加えるだけです。 – user3341592

答えて

1

正確に効率的ではありませんが、以下では簡単にパイプライン内の条件付きのコマンドを設定します。

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

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

(optional_command || true) optional_commandが余分猫としてゼロ以外の終了コードを返した場合に実行されませんを保証:あなたは常に何かを実行するので、トリックは、様々な代替コマンドから選択することですは、パイプラインコマンドをハングする可能性があります。

フル(サブシェル)を使用すると、多くの自由が得られます。コマンドが複雑すぎると、パイプラインを単純に保つ関数に入れます。

+0

完全性のために、ここには多かれ少なかれ私のコマンドがあります: 'tail -f $ {1} | ([[$(ファイル-i $ {1})=〜utf-16be]] &&(iconv -f UTF-16 -t UTF-8 || true)|| cat)| awk '...' | |カラー化 – user3341592

関連する問題