使用AWK从选项卡分隔的文件中提取一列

使用AWK从选项卡分隔的文件中提取一列,awk,Awk,我知道这是一个简单的问题,但awk命令确实在融化我的大脑。我有一个制表符分隔的文件“inputfile.gtf”,我需要从中提取一列并将其放入一个新文件“newfile.tsv”中。我一辈子都想不出使用awk执行此操作的正确语法。以下是我尝试过的: awk -F, 'BEGIN{OFS="/t"} {print $8}' inputfile.gtf > newfile.tsv 也 这两个都给了我一个空文件。在我搜索的每一个地方,人们似乎都有完全不同的方法来完成这个简单的任务,而在这一

我知道这是一个简单的问题,但awk命令确实在融化我的大脑。我有一个制表符分隔的文件“inputfile.gtf”,我需要从中提取一列并将其放入一个新文件“newfile.tsv”中。我一辈子都想不出使用awk执行此操作的正确语法。以下是我尝试过的:

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


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

您指定了错误的分隔符
/t
,制表符键入为
\t

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

您指定了错误的分隔符
/t
,制表符键入为
\t

awk 'BEGIN{ FS=OFS="\t" }{ print $8 }' inputfile.gtf  > newfile.tsv
为什么不更简单:

awk -F'\t' '{print $8}' inputfile.gtf  > newfile.tsv
为什么不更简单:

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

您的第一个命令:

awk -F, 'BEGIN{OFS="/t"} {print $8}'  inputfile.gtf  > newfile.tsv
awk 'BEGIN{OFS="/t";FS="/t"};{print $8}' inputfile.gtf  > newfile.tsv
您正在设置
-F,
,这不是必需的,因为您的文件不是
逗号分隔的

接下来,
OFS=“/t”
:语法不正确,它应该是
OFS=“\t”
,但您也不需要这样做,因为您不想将输出字段分隔符设置为
\t
,因为您只打印一条记录,而OFS根本不涉及这种情况;除非打印至少两个字段

您的第二个命令:

awk -F, 'BEGIN{OFS="/t"} {print $8}'  inputfile.gtf  > newfile.tsv
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 '{print $8}' inputfile.gtf  > newfile.tsv

您的第一个命令:

awk -F, 'BEGIN{OFS="/t"} {print $8}'  inputfile.gtf  > newfile.tsv
awk 'BEGIN{OFS="/t";FS="/t"};{print $8}' inputfile.gtf  > newfile.tsv
您正在设置
-F,
,这不是必需的,因为您的文件不是
逗号分隔的

接下来,
OFS=“/t”
:语法不正确,它应该是
OFS=“\t”
,但您也不需要这样做,因为您不想将输出字段分隔符设置为
\t
,因为您只打印一条记录,而OFS根本不涉及这种情况;除非打印至少两个字段

您的第二个命令:

awk -F, 'BEGIN{OFS="/t"} {print $8}'  inputfile.gtf  > newfile.tsv
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 '{print $8}' inputfile.gtf  > newfile.tsv

谢谢,那对我来说是个愚蠢的错误。谢谢,那对我来说是个愚蠢的错误。谢谢你的替代方法。我很困惑,因为我在网上找到的awk指南中没有一个能很好地解释命令的语法。因此,似乎有很多方法可以做同样的事情,而且它们在我看来都完全不同。正如你所知,在这里给新手编码。谢谢你的替代方法。我很困惑,因为我在网上找到的awk指南中没有一个能很好地解释命令的语法。因此,似乎有很多方法可以做同样的事情,而且它们在我看来都完全不同。正如你所知,在这里给新手编码。