2016-05-12 53 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

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

相关问题