Unix-Splitting 1列分为两列

时间:2017-03-18 12:51:21

标签: shell unix

我的数据集如下:

item  gram
tomato 500
orange 1500
bread  2000

现在它们似乎如图所示分开(例如,番茄500,而不是番茄500),但是当我制作csv文件时它们都在一列中。我希望项目进入一列,克进入另一列:

item       gram
tomato     500
orange     1500
bread      2000

1 个答案:

答案 0 :(得分:0)

要将空格运行更改为选项卡,

tr -s ' ' $'\t' <old.txt >new.tsv

其中old.txt是您的输入文件,new.tsv包含tr的新输出。

您的示例显示了某些值之间的多个空格。如果您在值之间始终只有一个空格,或者想要将 n 空格更改为 n 标签,请取出-s(当然在前一种情况下) ,它并不重要。)

$'\t'是一种(仅限Bash)引用机制,允许您将文字选项卡作为参数传递。 tr没有完全可移植的语法,但您也可以在大多数现代系统上使用'\t'

tr的第二个参数指定要用作新分隔符的字符。我选择tab作为分隔符,因为这是Excel所期望的(有点混乱)调用&#34; Unix&#34;我上次看的文件。要使用逗号(用于正确的CSV)或分号(在某些区域设置中显然优先于逗号,因为它们使用逗号作为数字中的小数分隔符;即使Excel仍调用格式CSV),请使用','或{{ 1}}分别作为第二个参数。

(单引号对于防止shell执行任何解释很重要。例如,分号字符是shell中的命令分隔符,因此如果忘记引用它,您将收到一条相当令人困惑的错误消息。)< / p>

';' uncoditionally替换您指定的所有字符实例。如果您想要更详细的控制(条件或依赖于上下文的替换),您需要一个更复杂的工具,如tr

CSV格式的细节实际上相当复杂,甚至在不同版本的Excel之间也有多种方言,因此如果您的实际数据比您的示例更复杂,您可能需要进行一些实验。