【问题标题】:split each line in a text file into new text files via command line通过命令行将文本文件中的每一行拆分为新的文本文件
【发布时间】:2014-05-23 03:37:38
【问题描述】:

我有一个 30 行的文本文件。我想按行拆分它,每行都在一个新的文本文件中。

我在命令行中使用了这个命令,但没有得到任何有用的输出,除了完全相同的 30 行文件,只是重命名为“xaa”:

split -l 1 mytextfile.txt

我在这里做错了吗?

【问题讨论】:

  • file mytextfile.txt 返回什么?
  • 返回相同的文件,但重命名为 xaa.txt
  • 我以为我应该得到 30 个新的文本文件,每个文件包含一行文本?
  • @jenn file 是一个显示文件类型的实用程序。当您运行file mytextfile.txt 时,file 将打印一行,如“mytextfile.txt:ASCII 文本,带有 CR 行终止符”。 1_CR 正在询问它为您的文件显示的内容。
  • 好吧,显然这已经无关紧要了,因为您发布了您的实际命令。有趣的是,您发布的第一个命令 split -l 2 mytextfile.txt 几乎可以工作。

标签: bash shell split


【解决方案1】:

您错误地使用了-l 参数。您使用-l 传入的值是要放入每个部分的行数。因此,您将一个 30 行的文件拆分为……一个 30 行的文件。

你需要做split -l 1 mytextfile.txt

【讨论】:

  • 它对我有用。我创建了一个 30 行的文件,做了split -l 1,它创建了文件xaaxbd
  • 我意识到问题是我从 csv 文件复制到文本文件。
  • 这是必需的:%s/^V^M/^V^M/g
  • 我在每个文件的末尾都有一个新行,应该怎么做才能删除它?
【解决方案2】:

试试 awk

cat  mytextfile.txt  |  awk '{ print $0 > "my_splittet_textfile_"NR".txt"}'

【讨论】: