2016-08-03 54 views
1

如何可能添加可選將條件格式轉換在管道外殼的一個命令序列

iconv -f utf-16 -t latin1 

管道命令序列內?

假設源文件可以是latin1或utf16。

使用awk,grep之類的shell腳本應該能夠在兩種格式上工作,方法是添加一個可選的轉換步驟。

在尊重DRY原則(不重複其他命令)的同時,怎樣才能以最美麗的方式完成?

編輯 - 命令

CURENT順序是這樣的:

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

你是什麼意思「一個可選」。你在找If語句嗎?你的管道命令的順序是什麼樣的? – JNevill

+0

是的,看着某種if語句,以便$ 1在utf-16時首先轉換爲拉丁文。想要避免臨時文件,並且只需在命令序列中添加一個額外的步驟(如果可能的話)。 – 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} | ([[$(file -i $ {1})=〜utf-16be]] &&(iconv -f UTF-16 -t UTF-8 || true)|| cat) awk'...'|切... | colorize' – user3341592