2016-05-12 57 views
0

我有一個像下面如何[在文本文件中]爲每行創建一個以第一列命名幷包含每​​行其餘所有列的新文件?

列的文件由製表符

Group1 name1:ENSG0365 name4:ENSMU0000196 name2:ENSMU00001826 
    Group2 name2:ENS000132622 name4:ENSUS00074793 
    Group3 name3:ENSFP000844 name1:ENSMU000025 

我要爲每一行的文件列表,第一列的名字命名(第1小組,組2等)的限定,並且看起來像這

名1:ENSG0365
NAME4:ENSMU0000196
mouse2:ENSMU00001826

我不知道w ^這個工具更適合這個工具。謝謝你的幫助。

回答

1

使用bash 4:

while read -r name rest; do echo "$rest" >"$name"; done </path/to/your/file 

更新:

while read -r name rest; do printf "%s\n" $rest >"$name"; done < /path/to/your/file 
+1

所以如果我的文件被稱爲Groups.txt,該行將是 '讀取-r文件休息;確認echo「$ rest」> $ file;完成

+0

我已經更新了我的答案。 – Cyrus

+0

對不起,我用錯誤的文件夾來嘗試腳本,它已經工作,但它並沒有將它們每列分割成一行。有沒有辦法解決它? 文件看現在這個樣子 'NAME3:ENSFP000844名1:ENSMU000025' –

1
perl -n -e '@x=split;open(F,">".shift(@x));$,="\n";print F @x' < groups.txt 

考慮你的意見是什麼意思胡亂猜測,你可以嘗試:

perl -n -e '@x=split /\t/;open(F,">".shift(@x));$,="\n";print F @x' < groups.txt 
+0

你的代碼做到了。現在我嘗試了另一個例子,我需要爲每個塊提取一個單獨的行,但是不要在新行中拆分空白,只根據TAB進行拆分。 另一個竅門是隻拆分這樣的元素:XX XX XXX(+)name1:XX XX(+);每一個分開在不同的行中。該元素可以在(+)或( - ) –

+0

@AndrésParada結束對不起,我不明白你在說什麼。你爲什麼不改變這個問題和它的例子是正確的? – Gene

+0

感謝您的更新,它的工作非常好。 –

相關問題