使用AWK从制表符分隔文件中提取一列

时间:2017-10-13 17:45:39

标签: awk

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

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

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

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

3 个答案:

答案 0 :(得分:1)

您指定了错误的分隔符/t标签字符键入为\t

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

答案 1 :(得分:1)

为什么不简单:

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

答案 2 :(得分:0)

您的第一命令:

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

您设置的-F,不是必需的,因为您的文件不是以,逗号分隔的。

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

您的第二命令:

\t

同样不是awk 'BEGIN{OFS="/t";FS="/t"};{print $8}' inputfile.gtf > newfile.tsv 它应该是/t。此外,\tFS="\t"

类似

您实际需要的是:

-F "\t"

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

如果您的文件只有awk -v FS="\t" '{print $8}' inputfile.gtf > newfile.tsv 并且您的字段之间没有空格,那么您只需使用:

tabs