拆分命令 - 选择输出名称

时间:2014-11-03 20:44:11

标签: python bash split

我有一个名为myfile.txt的文本文件。该文件包含50,000行,我想将其拆分为50个文本文件。我知道使用split命令很容易:

split myfile.txt

这将输出50个1000行文件:xaa,xab和xac。

我的问题是,如何运行拆分文本文件以便命名输出文件:

1.txt 
2.txt
3.txt

...

50.txt

请在python或bash中寻求答案。谢谢!

6 个答案:

答案 0 :(得分:3)

这是一个使用itertools.islice获取不同文件名的块和字符串格式的潜在解决方案:

from itertools import islice

with open('myfile.txt') as in_file:
    for i in range(1, 51):
        with open('{0}.txt'.format(i), 'w') as out_file:
             lines = islice(in_file, 1000)
             out_file.writelines(lines)

答案 1 :(得分:1)

要在空目录中生成测试数据,可以使用

seq 50000 | split -d

要以您想要的方式重命名,您可以使用

ls x* | awk '{print  $0, (substr($0,2)+1) ".txt"}' | xargs -n2 mv

答案 2 :(得分:1)

这是一个有趣的问题:如果您的split命令支持--filter选项,则可以使用它!

如果你打电话

split --filter=./banana myfile.txt

然后将执行命令./banana,并将设置为名称FILE的环境变量split选择写入它正在处理的块。此命令将在其标准输入上接收正在处理的块。如果此命令返回非零状态代码,则split将中断其操作。

-d选项一起,这正是您想要的。使用-d选项,名称拆分将选择文件名为x01x02等。

制作剧本:

#!/bin/bash

# remove the leading x from FILE
n=${FILE#x}
# check that n is a number
[[ $n = +([[:digit:]]) ]] || exit 1
# remove the leading zeroes from n
n=$((10#$n))

# send stdin to file
cat > "$n.txt"

请调用此脚本bananachmod +x,然后转:

split -d --filter=./banana myfile.txt

这个--filter选项非常有趣。

答案 3 :(得分:0)

它不是你想要的,而是正在运行

split -d myfile.txt

将输出

x00
x01
x02
...

答案 4 :(得分:0)

以下是如何在bash中分割此文件的示例:

split -l 1000 -d --additional-suffix=.txt myfile.txt

-l参数确定每个拆分文件中包含的行数(在本例中为1000,总共50个文件),-d参数使用数字而不是后缀的字母,以及我们传递给--additional-suffix参数的值为每个文件提供.txt文件扩展名。

这将创建

x00.txt
x01.txt
x01.txt

如果要更改输出文件的“x”部分,则需要在输入文件后添加前缀(例如myfile.txt f将创建f01.txtf02.txt等等。)

请注意,如果没有--additional-suffix,您的文件都将缺少文件扩展名。

我看看有没有办法拆分文件并用后缀命名,但我没有找到任何东西。

答案 5 :(得分:-1)

一种简单的方法:

f=open('your_file')
count_line,file = 0,1
for x in f:
    count_line +=1
    if count%1000 == 1:
        f1 = open(str(file) + '.txt','w')
        f1.write(x)
        file +=1
    elif count_line%1000 == 0:
        f1.write(x)
        f1.close()
    else:f1.write(x)