[英]Using AWK to extract one column from a tab separated file
我知道这是一个简单的问题,但是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
这两个都给我一个空文件。 在我到处搜寻的地方,人们似乎有完全不同的方式来尝试完成此简单任务,而此时我已完全迷失了方向。 任何帮助将不胜感激。 谢谢。
您指定了错误的定界符/t
, 制表符输入\\t
:
awk 'BEGIN{ FS=OFS="\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
要设置-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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.