我知道这是一个简单的问题,但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
这两个都只给我一个空文件。在我搜索的每个地方,人们似乎都有完全不同的方式来尝试完成这个简单的任务,而在这一点上我完全迷失了。任何帮助将不胜感激。感谢。
答案 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
。此外,\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