如何将标签转换为bash脚本中的确切空格数?

时间:2014-12-02 09:49:59

标签: bash tabs

我需要将带有制表符的字符串转换为带空格的字符串。

但我需要多少空格来匹配标签,以便格式相同。

我需要这个,因为Gnuplot标签不喜欢标签。

所以我想:

A      very       fat      cat

哪个是A\tvery\tfat\tcat,转换为:

A      very       fat      cat

有空格,而不是

A very fat cat

编辑1

我想我误解了这个问题:

$ cat -T Aggregate/summary.txt | head -n1
      Date        Pnl     AnnPnl  Days  AvTrds  AveVol  AveDur TDays      Pnl/$  AvPnl     StdDev       MAXD  Shrpe

但是当我分配给变量时,空格会丢失:

$ FF=`cat Aggregate/summary.txt | head -n1`; echo $FF
Date Pnl AnnPnl Days AvTrds AveVol AveDur TDays Pnl/$ AvPnl StdDev MAXD Shrpe

3 个答案:

答案 0 :(得分:2)

您可以使用expand命令:

~$ cat >c
a       fast    cat     nrstaui e
~$ expand c>d

使用cat -A时,您可以看到使用了空格(标签由^I表示):

~$ cat -A c
a^Ifast^Icat^Inrstaui^Ie$
~$ cat -A d
a       fast    cat     nrstaui e$

编辑: 如果将行指定给变量,则必须使用双引号来查看差异:

~$ F=$(cat c)
~$ echo "$F" |cat -A
a^Ifast^Icat^Inrstaui^Ie$
~$ echo $F |cat -A
a fast cat nrstaui e$

空格相同的问题:

~$ F=$(cat d)
~$ echo "$F" |cat -A
a       fast    cat     nrstaui e$
~$ echo $F |cat -A
a fast cat nrstaui e$

答案 1 :(得分:0)

这里有一个实用工具:expand expand [file](或来自标准输入)应该可以解决问题。

Re:你的编辑,

使用引用 POSIX样式的命令替换而不是反引号:

FF="$(cat Aggregate/summary.txt | head -n1)"; echo "$FF"

答案 2 :(得分:0)

了解为什么您的TAB空间被转换为单个空间字符

让我们将您的变量重命名为“variable”并将以下内容分配给它

variable ="      Date        Pnl     AnnPnl  Days  AvTrds  AveVol  AveDur TDays      Pnl/$  AvPnl     StdDev       MAXD  Shrpe"

[1] 当你这样做时

echo $variable

您的输出将是

Date Pnl AnnPnl Days AvTrds AveVol AveDur TDays Pnl/$ AvPnl StdDev MAXD Shrpe

原因: echo看到你的变量不是一个大字符串,而是由空格或多个空格字符组成的几个字符串。这是因为bash没有将此变量视为一个字符串,因为变量未包含在双qoutes中。

[2] 当你做

 echo "$variable"

您的输出将是

      Date        Pnl     AnnPnl  Days  AvTrds  AveVol  AveDur TDays      Pnl/$  AvPnl     StdDev       MAXD  Shrpe

原因:这是因为您用双引号括起变量,bash会自动将其解释为一个大字符串。因此,echo将打印出这一大字符串。