2015-10-09 57 views
0

我想結合$2中相同的文本,並將它們輸出到單獨的文件中,匹配項是新文件的名稱。由於實際文件相當大,我打開每個文件,然後關閉以節省速度和內存,我的嘗試如下。謝謝 :)。awk輸出匹配來分開文件

awk '{printf "%s\n", $2==$2".txt"; close($2".txt")}' input.txt **'{ print $2 > "$2.txt" }'** 

input.txt中

chr19:41848059-41848167 TGFB1:exon.2;TGFB1:exon.3;TGFB1:exon.4 284.611 108 bases 
chr15:89850833-89850913 FANCI:exon.20;FANCI:exon.27;FANCI:exon.32;FANCI:exon.33;FANCI:exon.34 402.012 80 bases 
chr15:31210356-31210508 FANC1:exon.6;FANC1:exon.7 340.914 152 bases 
chr19:41850636-41850784 TGFB1:exon.1;TGFB1:exon.2;TGFB1:exon.3 621.527 148 bases 

希望的輸出爲TGFB1.txt

chr19:41848059-41848167 TGFB1:exon.2;TGFB1:exon.3;TGFB1:exon.4 284.611 108 bases 
chr19:41850636-41850784 TGFB1:exon.1;TGFB1:exon.2;TGFB1:exon.3 621.527 148 bases 

希望的輸出爲FANC1.txt

chr15:89850833-89850913 FANCI:exon.20;FANCI:exon.27;FANCI:exon.32;FANCI:exon.33;FANCI:exon.34 402.012 80 bases 
chr15:31210356-31210508 FANC1:exon.6;FANC1:exon.7 340.914 152 bases 

編輯:

awk -F '[ :]' '{f = $3 ".txt"; close($3 ".txt")} print > f}' BMF_unix_loop_genes_IonXpress_008_150902_loop_genes_average_IonXpress_008_150902.bed > /home/cmccabe/Desktop/panels/BMF **/"$f".txt;** 
bash: /home/cmccabe/Desktop/panels/BMF: Is a directory 
+1

[重定向'print'和'printf'的輸出](http://www.gnu.org/software/gawk/manual/gawk.html#Redirection) –

+1

在'awk'中我添加了一個編輯以重定向輸出。那是對的嗎?謝謝 :)。 – Chris

+2

請勿使用答案編輯帖子。如果您認爲它有用並且接受它,請發佈答案。至於這是否正確。試試看看。 –

回答

2

您只需重新定義字段分隔符包括冒號,然後該文件的名稱將是$ 3

awk -F '[ :]' '{f = $3 ".txt"; print > f}' input.txt 

我遇到了一些awks其中構建文件名以重定向的權利是有問題的問題,這就是爲什麼我使用的是雜物BLE。然而,週五下午的啤酒車已經出現,我不記得具體的細節:/

我不會打擾關閉文件,除非您預計會生成數百或數千個新文件。

+0

非常感謝大家,明天我會試一試,讓你知道:)。 – Chris

+0

在編輯中,我添加了一個'awk',但在嘗試將新文件重定向到目錄時出現錯誤。謝謝 :)。我也期待數百個文件如此添加結束:)。 – Chris

2

你需要的第二個字段拆分爲所需的字段名稱。這應該做

$ awk 'BEGIN{close(p)} {split($2,f,":"); p=f[1]".txt"; print $0 > p }' file 

注意,它不會產生您的輸出正是因爲你的領域之一,有一個錯字

$ ls *.txt 
FANC1.txt FANCI.txt TGFB1.txt 
+1

BEGIN塊的用途是什麼? –

+1

哎呀,它一定是星期五下午的啤酒車:)。應該在主體中。 – karakfa