如何从tsv文件中提取第一列?

时间:2018-03-17 19:02:47

标签: awk sed cut

我有一个包含一些数据的文件,我想只使用第一列作为我的脚本的stdin,但是我无法提取它。 我试过用这个

awk -F"\t" '{print $1}' inputs.tsv

但它只显示第一列的第一个字母。我尝试了其他一些东西,但它要么显示整个文件,要么只显示第一列的第一个字母。

我的文件看起来像这样:

Harry_Potter    1
Lord_of_the_rings    10
Shameless    23
....

2 个答案:

答案 0 :(得分:4)

您可以使用所有Unix和Linux系统上提供的cut

cut -f1 inputs.tsv

您无需指定-d选项,因为tab是默认分隔符。来自man cut

 -d delim
         Use delim as the field delimiter character instead of the tab character.

正如本杰明正确地指出的那样,你的awk命令确实是正确的。 Shell将literal \ t作为参数传递,awk将其解释为选项卡,而其他命令(如cut)可能不会。

在Bash中,正确的表示方式是使用ANSI引用,如下所示:

awk -F$'\t' '{print $1}' inputs.tsv

不确定为什么你只把第一个字符作为输出。

您可能想看一下这篇文章:

答案 1 :(得分:2)

试试这个(更好地依赖真正的解析器......):

csvcut -c 1 -f $'\t' file

检查csvkit

输出:

Harry_Potter
Lord_of_the_rings
Shameless

注意:

正如@RomanPerekhrest所说,你应该修复你破碎的样本输入(我们看到了预期标签的空格......)