簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM