2014-02-25 91 views
-3

我遇到的情况,我要创建一个制表符分隔的文件档案(.tsv)使用一些变量值,如一个在下面结构的TSV文件的Unix shell脚本

$header1 $T $header2 $T $header3 
$valueX1 $T $valueY1 $T $valueZ1 
$valueX2 $T $valueY2 $T $valueZ2 
$valueX3 $T $valueY3 $T $valueZ3 

# where $T represent a Tab 

可有人请给命令使用Unix shell脚本创建这个文件结构?

在此先感谢

+0

'echo $ header1 \ t $ header2 \ t $ header3' –

+0

'echo“$ var1 \ t $ var2 \ t $ var3”>>/path/to/file'会追加一行,其中包含三个变量由选项卡分隔到/ path/to/file。 – isedev

+0

在我看来,棘手的一点是要迭代你的变量......你真的有'$ valueX1'等吗?你在哪里得到这些价值? – ocodo

回答

0

您可以使用printf写一个制表符,或者通过它就像你的例子赋值给一个变量T

T=$(printf '\t') 
header1=Foo header2=Bar 

# The string must be double quoted! 
echo "$header1$T$header2" 

或可能利用其与这里的文件:

cat > file.tsv << EOF 
$header1 $T $header2 $T $header3 
$valueX1 $T $valueY1 $T $valueZ1 
$valueX2 $T $valueY2 $T $valueZ2 
$valueX3 $T $valueY3 $T $valueZ3 
EOF 

,或者直接用printf:

printf "%s\t%s\n" "$header1" "$header2" 
+0

@EmacsFodder在例如这里的文档中使用它。不,POSIX'echo'不会对'\ t'做任何事情。 –

+0

你错了,你测试错了。 'T =“\ t”'恰好适合你,因为你在一个XSI系统上,而且你只在回声中使用这个变量。 'sh'和'bash'' echo'都不会在我的系统上专门处理'\ t'。 –

+0

@EmacsFodder我甚至不知道你在争吵什么。假设echo会扩展'“\ t”'在bash中不起作用,除非设置了'xpg_echo',并且它可能会或可能不会在'sh'(破折号而不是灰,zsh但不是ksh)中起作用。这根本不是sh或bash兼容的。即使你的回声是''\ t“',对于除了回声以外的任何其他代码都不会使用'T =”\ t“'。 –