2017-06-22 117 views
0

我試圖用awkfile跳過標題分成8-column6-column輸出。我不知道我是否做了正確的拆分,因爲我需要首先拆分$2:然後再拆分-。根據具體情況,每個awk的期望輸出低於一個或另一個。謝謝 :)。Awk在同一字段中使用多個分隔符分割輸入製表符分隔的文件

文件「製表delimited`

Gene Position Strand 
SMARCB1 22:24133967-24133967 + 
RB1 13:49037865-49037865 - 
SMARCB1 22:24176357-24176357 + 

AWK

awk -F'\t' -v OFS="\t" 'NR>1{split($2,a,":"); print a[1],a[2],a[3],"chr"$2,"0",$3,"GENE_ID="$1}' 

8列所需的輸出tab-delimited

chr22 24133967 24133967 chr22:24133967-24133967 0 + . GENE_ID=SMARCB1 
chr13 49037865 49037865 chr13:49037865-49037865 0 - . GENE_ID=RB1 
chr22 24176357 24176357 chr22:24176357-24176357 0 + . GENE_ID=SMARCB1 

awk的

awk -F'\t' -v OFS="\t" 'NR>1{split($2,a,":"); print a[1],a[2],a[3],"chr"$2,".",$1,}' 

6列所需的輸出tab-delimited

chr22 24133967 24133967 chr22:24133967-24133967 . SMARCB1 
chr13 49037865 49037865 chr13:49037865-49037865 . RB1 
chr22 24176357 24176357 chr22:24176357-24176357 . SMARCB1 
+4

您應該知道如何創建MCVE([MCVE]),它需要輸入數據以及實際輸出和預期輸出。 Awk腳本是否產生你想要的數據?如果是這樣,他們可能是正確的,但如果他們是正確的,你可能不會問這個問題。這導致我們假設你想要一些與輸出不同的東西,但我們不能輕易猜出你想要的東西。 –

+2

請更新您的Q以顯示您的要求輸出。你想要一個8 col或6 col輸出(或兩者?)。好的 – shellter

+0

每個輸出都是一個單獨的'awk',因爲它是情境我將使用什麼類型...謝謝:) – Chris

回答

2

擴展方法:

對於 -column輸出:

awk -v c=6 'BEGIN{ FS=OFS="\t" }NR>1{ split($2,a,":|-"); k="chr"; 
      printf("%s\t%d\t%d\t%s\t",k a[1],a[2],a[3],k $2); 
      if (c==6) print ".",$1; else print "0",$3,".","GENE_ID="$1 }' file 

輸出:

chr22 24133967 24133967 chr22:24133967-24133967 . SMARCB1 
chr13 49037865 49037865 chr13:49037865-49037865 . RB1 
chr22 24176357 24176357 chr22:24176357-24176357 . SMARCB1 

對於 -column輸出(通過傳遞-v c=<number>(列)變量):

awk -v c=8 'BEGIN{ FS=OFS="\t" }NR>1{ split($2,a,":|-"); k="chr"; 
      printf("%s\t%d\t%d\t%s\t",k a[1],a[2],a[3],k $2); 
      if (c==6) print ".",$1; else print "0",$3,".","GENE_ID="$1 }' file 

輸出:

chr22 24133967 24133967 chr22:24133967-24133967 0 + . GENE_ID=SMARCB1 
chr13 49037865 49037865 chr13:49037865-49037865 0 - . GENE_ID=RB1 
chr22 24176357 24176357 chr22:24176357-24176357 0 + . GENE_ID=SMARCB1 
+0

非常感謝您的幫助:) – Chris

+1

@克里斯,不客氣 – RomanPerekhrest