我有一个文本文件,里面正好有 1000 行。我想将文件拆分成 1000 个不同的文件,方法是将每一行写入一个单独的文本文件。并且我希望拆分后的文件的名称按顺序排列。
例子:
foo.txt
文件包含,
foo
bar
...
...
lastfoo
第一个分割文件必须只包含一行foo
,其名称为bar1.txt
。第二个文件必须只包含一行bar
,其名称为。bar2.txt
同样,最后一个文件应包含一行lastfoo
,最后一个文件的名称为bar1000.txt
。
命令行(单行)方式比脚本方式更好。
答案1
用这个
split -l1 -a4 -d foo.txt bar
它创建了 1000 个文件:
bar0000
bar0001
bar0002
bar0003
...
man split
有关选项的更多信息请参见:
-l, --lines=NUMBER
put NUMBER lines per output file
-a, --suffix-length=N
use suffixes of length N (default 2)
-d, --numeric-suffixes
use numeric suffixes instead of alphabetic
答案2
既然你提到命令行会更好,我明白脚本不是首选,但也不排除。
在下面的脚本中,在第一行定义sourcefile
,destination directory
和 (输出) 。filename
在该行中:
while currnumber <= len(lines) and currnumber <= 1000:
最后一条输出行被定义为第 1000 行,但如果您想限制输出,当然可以将其设置为任何(最大)行。或者,您可以删除该and currnumber <= 1000
部分,以导出所有行。
要使用另一个(或不使用)扩展,请替换.txt
或删除+".txt"
剧本:
#!/usr/bin/python3
source = "sourcefile"; destination = "/path/to"; outfilename = "outfilename"
with open(source) as lines:
lines = lines.readlines()
currnumber = 1
while currnumber <= len(lines) and currnumber <= 1000:
file = destination+"/"+outfilename+str(currnumber)+".txt"
with open(file, "wt") as writefile:
writefile.write(lines[currnumber-1])
currnumber = currnumber+1
将其粘贴到一个空文件中,另存为export_lines.py
并通过以下命令运行:
python3 /path/to/script/export_lines.py
结果:
outfilename1.txt
outfilename2.txt
etc.
答案3
仍然只有一行 :) :
c=0; while read -r LINE || [[ -n $LINE ]]; do c=$(( $c+1 )); echo $LINE>bar$c.txt; done <foo.txt
命令太长,最好用别名:
alias s='c=0; while read -r LINE || [[ -n $LINE ]]; do c=$(( $c+1 )); echo $LINE>bar$c.txt; done <'
运行身份:
s foo.txt