【问题标题】: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,所以就使用它。

标签: awk while-loop


【解决方案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!=prev{close(out); out=$1".txt"; prev=$1} {sub(/[^\t]+\t/,""); print > out}' file
    

    【讨论】:

    • 你是一个了不起的人!我正在查找您键入的命令中的所有内容,以更好地了解我在做什么。谢谢你帮助我!
    • 不客气,如果您有任何问题,请在完成一些初步研究后随时提问。每个使用 UNIX 处理文本的人都应该购买 Arnold Robbins 的《Effective Awk Programming, 4th Edition》一书。
    猜你喜欢
    • 2022-06-10
    • 2019-02-09
    • 2018-08-24
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多