2016-08-03 51 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