2017-10-13 21 views
0

これは簡単な質問ですが、awkコマンドは文字通り私の脳を溶かしています。私はタブを区切ったファイル "inputfile.gtf"を持っていて、そこから一つの列を抽出して新しいファイル "newfile.tsv"に入れなければなりません。私の人生ではawkでこれを行う正しい構文を理解できません。ここで私が試したものです:AWKを使用してタブで区切られたファイルから1つの列を抽出する

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

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

これらのいずれもが、ちょうど私の空のファイルを与えます。私が探しているところでは、人々はこの単純な仕事を達成しようとするには全く違ったやり方をしているように見えます。この時点で私は完全に失われています。どんな助けでも大歓迎です。ありがとう。

答えて

1

あなたは間違っている区切り/t、文字が\tとして入力タブ指定されている:

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

ありがとう、それは私の部分で愚かな間違いだった。 –

+0

@DavidTatarakis、よろしいですか? – RomanPerekhrest

0

をなぜ単純:

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

代替方法をありがとうございます。私は混乱しました。なぜなら、私がオンラインで見つけたawkガイドのどれも、コマンドの構文を説明する良い仕事をしていないからです。だから、同じことをする方法はたくさんあるようですが、それらはすべて私と全く違って見えます。あなたが教えてくれるようにここで初心者をコーディングしてください。 –

0

あなた第一コマンド:

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

-F,は必須ではありません。ファイルは,カンマ区切りではありません。

次に、OFS="/t":構文が正しくない、OFS="\t"である必要がありますが、出力フィールドのセパレータを\tに設定したくないので、これは必要ありません。この場合はまったく関与していません。あなたが少なくとも2つのフィールドを印刷しない限り。

あなた第二コマンド:

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

再びそれは\tあるべき/tではありません。あなたが実際に必要なもの-F "\t"

に似またFS="\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 
関連する問題