2017-10-13 50 views
0

我知道这是一个简单的问题,但awk命令实际上正在融化我的大脑。我有一个选项卡分隔文件“inputfile.gtf”,我需要从中提取一列,并将它放到一个新文件“newfile.tsv”中,我不能在我的生活中找出正确的语法来使用awk进行此操作。以下是我已经试过:使用AWK从选项卡分隔的文件中提取一列

awk -F, 'BEGIN{OFS="/t"} {print $8}' inputfile.gtf > newfile.tsv 

awk 'BEGIN{OFS="/t";FS="/t"};{print $8}' inputfile.gtf > newfile.tsv 

这些都只是给我一个空文件。在我搜索的任何地方,人们似乎都有完全不同的方式去完成这个简单的任务,而在这一点上,我完全迷失了方向。任何帮助将不胜感激。谢谢。

回答

1

您已经指定了错误的分隔符/t,该标签字符类型为\t

awk 'BEGIN{ FS=OFS="\t" }{ print $8 }' inputfile.gtf > newfile.tsv 
+1

谢谢,那是我的一个愚蠢的错误。 –

+0

@DavidTatarakis,不客气 – RomanPerekhrest

0

为什么不能简单:

awk -F'\t' '{print $8}' inputfile.gtf > newfile.tsv 
+0

感谢您的替代方法。我一直很困惑,因为我在网上找到的awk指南都没有很好地解释命令的语法。所以看起来有很多方法可以做同样的事情,而且他们都与我完全不同。你可以告诉新手在这里编码。 –

0

你命令:

awk -F, 'BEGIN{OFS="/t"} {print $8}' inputfile.gtf > newfile.tsv 

您在设置-F,这不是必需的,因为您的文件不是用逗号分隔的,

接下来,OFS="/t":语法不正确,应该是OFS="\t",但你又不需要这个,你不想来设置输出字段分隔为\t因为你只打印单个记录和OFS是根本不参与这个案件;除非您打印至少两个字段。

第二命令:

awk 'BEGIN{OFS="/t";FS="/t"};{print $8}' inputfile.gtf > newfile.tsv 

同样它不是/t应该\t。此外FS="\t"类似于-F "\t"

你真正需要的是:

awk -F"\t" '{print $8}' inputfile.gtf > newfile.tsv 

awk -v FS="\t" '{print $8}' inputfile.gtf > newfile.tsv 

而如果你的文件刚刚tabs和你的字段没有空格之间那么你可以简单地使用:

awk '{print $8}' inputfile.gtf > newfile.tsv