2017-03-18 56 views
0

我有数据集如下:Unix的分裂1个栏为两列

item gram 
tomato 500 
orange 1500 
bread 2000 

现在,他们似乎要分离如图所示(例如,番茄500,不tomato500),但它们都在一列当我做一个CSV文件。我想要的物品进入一列克进入另一列是:

item  gram 
tomato  500 
orange  1500 
bread  2000 
+0

你正在使用哪个软件,或者哪个程序应该查看resultung csv?我认为你只需要指定正确的字段分隔符(它似乎是空格或制表符)。 –

+0

我需要在Excel中创建两列的表,所以我想创建一个csv文件。 – reader

+1

Excel提供详细的控制如何“解释”文本数据。功能区中有一个图标称为导入文本数据。 您将剪贴板中的内容复制/粘贴到excel中,它会被当前活动的任何设置解释,并且整个文本仍处于选中状态。 现在您可以找到并单击该按钮来更改设置: 1.不固定但由字符分隔 2.在下一步中选择空格或制表符。 Excel将更改后的设置应用于所选文本,从而将其分为两列(检查出来,比使用它更容易描述:))。 –

回答

0

要改变的空间运行的标签,

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

其中old.txt是输入文件和new.tsv包含新从tr输出。

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

$'\t'是一个(仅限Bash)引用机制,它允许您将文字标签作为参数传递。 tr对此没有完全便携的语法,但您也可以在大多数现代系统上使用'\t'

tr的第二个参数指定了用作新分隔符的字符。我选择了tab作为分隔符,因为这是Excel预期的,因为它(有点困惑地)称我上次看到的是“Unix”文件。要使用逗号(用于正确的CSV)或分号(在某些语言环境中明显优先于逗号,因为它们使用逗号作为数字中的小数分隔符;即使Excel仍称CSV格式),使用','或​​3210作为第二个参数,分别。 (单引号对于防止shell执行任何解释很重要,例如,分号字符是shell中的命令分隔符,所以如果您忘记引用它,会得到一个令人困惑的错误消息。)

tr uncoditionally替换您指定的字符的所有实例。如果您想要更详细的控制(有条件或取决于上下文的替换),则需要更复杂的工具,如sed

CSV格式的细节实际上相当复杂,甚至在不同版本的Excel之间也有几种方言,所以如果您的真实数据比您的示例更复杂,您可能需要尝试一下。

+0

当然,真正的女性和真正的男人首先不会使用Excel。 – tripleee

+0

不幸的是,这句话变得更接近了。 – reader

+0

您关心文件中的实际内容,以及它与您在Excel中使用的导入设置是否兼容,而不是它看起来的样子。如果您的Excel需要逗号而不是选项卡,请更改为'tr -s''','' – tripleee