1

我需要在 commons-cli 中将 tab 作为参数传递。当我将参数设为“\\t”时,命令行解析器会将其解析为“\t”字符本身,而不是 TAB ( ) 空格。我怎样才能做到这一点?

编辑 :

正如@centic 所建议的,用我如何调用应用程序来更新问题。我在 Unix 中使用命令行调用,其中反斜杠被检测为转义字符。

更准确地说,我在提交 hadoop 流作业时使用它,如果这有帮助的话。例如:

hadoop jar $HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-2.4.0.jar -D stream.map.output.field.separator="\t" -file mapper.py -mapper mapper.py -file reducer.py -reducer reducer.py -input /in -output /out

Apache Hadoop 使用 Apache Commons-cli 作为命令行实用程序。所以我假设“\\t”解析为“\t”并作为选项传递。但是当我通过调试 hadoop 源代码打印它时,它不是 TAB 空格字符,而是打印为“\t”(字符串文字)本身。

4

1 回答 1

1

当您在 shell 中调用应用程序时尝试提供此功能时,这实际上与 shell 如何处理此类特殊字符有关,而不是 commons-cli 或 Java。

shell(它是当今大多数 unix/linux 版本的默认 shell)对此有特殊的语法,$'\t'请参阅手册中的这一节

所以你的电话会是这样的

HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-2.4.0.jar -D 
stream.map.output.field.separator=$'\t' -file mapper.py -mapper 
mapper.py -file reducer.py -reducer reducer.py -input /in -output /out
于 2015-06-16T06:07:46.487 回答