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

Posted

技术标签:

【中文标题】如何将文本文件中的每一行保存为新文件【英文标题】:How to save each line in a text file as new file 【发布时间】:2015-08-16 19:34:01 【问题描述】:

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

例如,我的 txt 文件有数百行类似这样:

sample1name_oligos 引物 forwardseq reverseseq sample1name

sample2name_oligos 引物 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 > "$LINE.txt";完成。

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

sample1name_oligos 引物 forwardseq reverseseq sample1name

文件被命名为:

sample1name_oligos 引物 forwardseq reverseseq sample1name.

我不知道从这里去哪里。我会很感激任何帮助。如果不是很明显,我没有什么终端经验,所以我也很感激能解释我所缺少的答案。

邦妮

【问题讨论】:

在您的 awk 中,您必须在完成写入后 close( $1 ".txt" ) 文件(在您的情况下的每一行之后)。这由 too many open files 错误指示。 @n0741337 ... 或使用 GNU awk,它会根据需要简单地为您处理。 @Bonnie 在我的测试中,awk 'print substr($0,match($0,$2)) >> ( $1 ".txt" )' filename 适用于 100 多行。请检查可疑行的第一个字段中是否有额外的空白,这会导致输出文件名重复。 @xb 这与文件内容无关,这是 OP 正在使用的 awk 的同时打开文件问题。 @Bonnie 从不尝试删除第一个(或任何)字段的substr($0,match($0,$2))。想象一下像foobar foo bar 这样的行会造成什么混乱。并且永远不要像在你的第二个脚本中那样使用 shell 循环(这会非常慢,并且在给定一些输入文件内容的情况下绝对会破坏你的文件)来操作文本 - UNIX shell 是一个调用 UNIX 工具和 UNIX 文本操作工具的环境是 awk,所以就使用它。 【参考方案1】:

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

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

【讨论】:

【参考方案2】:
awk -F'\t' '$1!=prevclose(out); out=$1".txt"; prev=$1 sub(/[^\t]+\t/,""); print > out' file

【讨论】:

你是一个了不起的人!我正在查找您键入的命令中的所有内容,以更好地了解我在做什么。谢谢你帮助我! 不客气,如果您有任何问题,请在完成一些初步研究后随时提问。每个使用 UNIX 处理文本的人都应该购买 Arnold Robbins 的《Effective Awk Programming, 4th Edition》一书。

以上是关于如何将文本文件中的每一行保存为新文件的主要内容,如果未能解决你的问题,请参考以下文章

从 RichTextBox 中的每一行获取文本?

如何在unix中的每一行末尾添加文本

如何使用bat脚本批处理所有txt文本文件中的每一行开头添加一个指定字符

如何在文本文件中的每一行的开头添加序号

如何将文本文件中的一行的子字符串保存到字符串数组中?

试图让文本文件的每一行成为一个数组列表