如何将文本文件中的每一行保存为新文件

时间:2015-06-02 20:14:54

标签: awk while-loop

我有一个带有5列的制表符分隔文本文件,我希望每一行都是自己的txt文件,其中包含第2-5列的信息,并以第1列命名。

例如,我的txt文件有数百行与此类似:

sample1name_oligos primer forwardseq reverseseq sample1name

sample2name_oligos primer forwardseq reverseseq sample2name

我想要一个名为sample1name_oligos的txt文件,如下所示:

primer forwardseq reverseseq sample1name

和一个名为sample1name_oligos的txt文件,如下所示:

primer forwardseq reverseseq sample1name

我尝试了两种方法:

1。我找到了我认为的解决方案:

awk'{print substr($ 0,match($ 0,$ 2))>> ($ 1“。txt”)}'文件名

(来自http://www.linuxquestions.org/questions/linux-newbie-8/how-to-save-each-line-from-textfile-as-new-file-889795/

这适用于我制作的测试文件(5行),但是当我在100多行文件上运行时,我得到前17个文件然后出错:

awk:File18.txt会打开太多文件  输入记录号18,文件myfile.txt  源行号1

我删除了第18行并重试并得到了同样的错误。我删除了前20行并重试并得到了同样的错误。

2。从同一个链接,我试过

cat myfile.txt |同时阅读LINE;做echo $ LINE> “$ LINE.txt”;完成。

这为每一行创建了一个文件,如下所示:

sample1name_oligos primer forwardseq reverseseq sample1name

并将文件命名为:

sample1name_oligos primer forwardseq reverseseq sample1name。

我不知道从哪里开始。我很感激任何帮助。如果不是很明显,我的终端体验很少,所以我也很感激能解释我所缺少的答案。

邦尼

2 个答案:

答案 0 :(得分:3)

awk -F'\t' '$1!=prev{close(out); out=$1".txt"; prev=$1} {sub(/[^\t]+\t/,""); print > out}' file

答案 1 :(得分:0)

这个对我有用。刚为你的第二个解决方案添加了一个计数器

counter=0; cat your_file.txt | while read LINE; do ((counter++)); echo $LINE > "path/to/your/files/$counter.txt"; done