unix join separator char

时间:2009-11-12 13:56:38

标签: unix join

对不起那个微不足道的问题。

我使用unix join 命令进行了一些操作,试图获取标签而不是空格作为默认分隔符。 -t是参数,但这些不起作用(ubuntu 9.10 64 bit 2.6.31-14,GNU coreutils 7.4版)

join file1 file2 -t"\t"
join file1 file2 -t="\t"
join file1 file2 -t="\\t"
join file1 file2 -t $"\t"

等等。当然,我总是可以使用一些不太优雅的解决方案,比如

join file1 file2 > output
sed "s/ /\t/g" output

但我想看起来很聪明:-)而且,如果有一个-t参数,它必须有效。

6 个答案:

答案 0 :(得分:42)

我认为它需要一个即时生成的变量

尝试

join file1 file12 -t $'\t'

答案 1 :(得分:5)

您可以按CTRL + v Tab

进入标签
join -t '<CTRL+v><Tab>' file1 file2

答案 2 :(得分:3)

join -t "`echo '\t'`" file1 file2

ps:在我的机器上,红帽企业Linux服务器版本5.1(Tikanga),命令join -t $'\t' file1 file2返回“非法变量名称”。

答案 3 :(得分:3)

一个似乎有效的替代技巧是将-t选项用引号括起来用文字制表符。这看起来像:

join '-t    ' ...

在t和结束引号之间有一个可变空格(因为它是一个标签)。

键入,它是:

join<Spc>'-t<Ctrl-v><Tab>' ...

答案 4 :(得分:2)

man join说,选项必须在文件名前面。你试过吗

join -t "\t" file1 file2

修改:反映Tonio的回答,正确的行将会读取

join -t $'\t' file1 file2

答案 5 :(得分:0)

其他方式是:

  

join -t“`echo -e”\ t“`”file1 file2`

或以更多的方式:

  

加入-t“$(echo -e”\ t“)”file1 file