Bash 将大文件拆分为小文件

Bash 将大文件拆分为小文件,bash,python-3.x,awk,Bash,Python 3.x,Awk,我有一个文本文件,它有数千个数值,比如 1. 2. 3. 4. 5. . . . . n 我知道我们可以使用awk来分离这些值。但是有没有一种方法可以获取不同文本文件中的前10,20,40,80160…,n个值 我使用python来实现这一点,但是分离这些文件需要很多时间 import numpy as np from itertools import islice data = np.loadtxt('ABC.txt', unpack=True,

我有一个文本文件,它有数千个数值,比如 1. 2. 3. 4. 5. . . . . n

我知道我们可以使用awk来分离这些值。但是有没有一种方法可以获取不同文本文件中的前10,20,40,80160…,n个值

我使用python来实现这一点,但是分离这些文件需要很多时间

import numpy as np
from itertools import islice
data = np.loadtxt('ABC.txt',
                 unpack=True,
                 delimiter=',',
                 skiprows=1)
n = 10
iterator = list(islice(data[0], n))
for item in range(n):
np.savetxt('output1.txt',iterator,delimiter=',',fmt='%10.5f')

iterator = list(islice(data[0], n*2))
for item in iterator:
np.savetxt('output2.txt', iterator, delimiter=',',fmt='%10.5f')

iterator = list(islice(data[0], n*4))
for item in iterator:
np.savetxt('output3.txt', iterator, delimiter=',',fmt='%10.5f')

iterator = list(islice(data[0], n*8))
for item in iterator:
np.savetxt('output4.txt', iterator, delimiter=',',fmt='%10.5f')
等等


在bash或python中有更好的方法来实现这一点吗。提前谢谢你

您没有提供任何示例输入和预期输出,并且您的问题文本模棱两可,因此这只是一个猜测,但这可能就是您想要的:

$ seq 1000 | awk -v c=10 'NR==c{print; c=2*c}'
10
20
40
80
160
320
640

如果没有,请编辑您的问题以澄清。

您没有提供任何示例输入和预期输出,并且您的问题文本模棱两可,因此这只是一个猜测,但这可能是您想要的:

$ seq 1000 | awk -v c=10 'NR==c{print; c=2*c}'
10
20
40
80
160
320
640

如果没有,请编辑您的问题以澄清。

这是一种效率低下但实施迅速的方法

s=5; for i in {1..10}; do ((s*=2)); head -$s file > sub$i; done

由于文件重叠,有更好的方法,但根据文件的大小和需要重复的次数,这可能就足够了。

一种效率低但易于实现的方法

s=5; for i in {1..10}; do ((s*=2)); head -$s file > sub$i; done
由于文件重叠,有更好的方法,但根据文件大小和需要重复的次数,这可能就足够了。

SED是您的朋友:

$ numlines=$( wc -l big_text_file.txt | cut -d' ' -f1 )

$ step=100

$ echo $numlines
861

$ for (( ii=1; ii<=$numlines; ii+=$step )); do echo $ii,$(( ii+step-1 ))w big_text_file.${ii}.txt; done > break.sed

$ cat break.sed
1,100w big_text_file.1.txt
101,200w big_text_file.101.txt
201,300w big_text_file.201.txt
301,400w big_text_file.301.txt
401,500w big_text_file.401.txt
501,600w big_text_file.501.txt
601,700w big_text_file.601.txt
701,800w big_text_file.701.txt
801,900w big_text_file.801.txt

$ sed -n -f break.sed big_text_file.txt 

$ wc -l big_text_file*.txt
   100 big_text_file.101.txt
   100 big_text_file.1.txt
   100 big_text_file.201.txt
   100 big_text_file.301.txt
   100 big_text_file.401.txt
   100 big_text_file.501.txt
   100 big_text_file.601.txt
   100 big_text_file.701.txt
    61 big_text_file.801.txt
   861 big_text_file.txt
  1722 total
$numlines=$(wc-l big_text_file.txt | cut-d'-f1)
$step=100
$echo$numlines
861
$for((ii=1;ii.sed)
$cat break.sed
1100W大文本文件.1.txt
101200W大文本文件.101.txt
201300W大文本文件.201.txt
301400W大文本文件.301.txt
401500W大文本文件.401.txt
501600W大文本文件.501.txt
601700W大文本文件.601.txt
701800W大文本文件.701.txt
801900W大文本文件.801.txt
$sed-n-f break.sed big_text_file.txt
$wc-l大文本文件*.txt
100大文本文件.101.txt
100大文本文件.1.txt
100大文本文件.201.txt
100大文本文件.301.txt
100大文本文件.401.txt
100大文本文件.501.txt
100大文本文件.601.txt
100大文本文件.701.txt
61大文本文件.801.txt
861大文本文件.txt
总数1722
SED是你的朋友:

$ numlines=$( wc -l big_text_file.txt | cut -d' ' -f1 )

$ step=100

$ echo $numlines
861

$ for (( ii=1; ii<=$numlines; ii+=$step )); do echo $ii,$(( ii+step-1 ))w big_text_file.${ii}.txt; done > break.sed

$ cat break.sed
1,100w big_text_file.1.txt
101,200w big_text_file.101.txt
201,300w big_text_file.201.txt
301,400w big_text_file.301.txt
401,500w big_text_file.401.txt
501,600w big_text_file.501.txt
601,700w big_text_file.601.txt
701,800w big_text_file.701.txt
801,900w big_text_file.801.txt

$ sed -n -f break.sed big_text_file.txt 

$ wc -l big_text_file*.txt
   100 big_text_file.101.txt
   100 big_text_file.1.txt
   100 big_text_file.201.txt
   100 big_text_file.301.txt
   100 big_text_file.401.txt
   100 big_text_file.501.txt
   100 big_text_file.601.txt
   100 big_text_file.701.txt
    61 big_text_file.801.txt
   861 big_text_file.txt
  1722 total
$numlines=$(wc-l big_text_file.txt | cut-d'-f1)
$step=100
$echo$numlines
861
$for((ii=1;ii.sed)
$cat break.sed
1100W大文本文件.1.txt
101200W大文本文件.101.txt
201300W大文本文件.201.txt
301400W大文本文件.301.txt
401500W大文本文件.401.txt
501600W大文本文件.501.txt
601700W大文本文件.601.txt
701800W大文本文件.701.txt
801900W大文本文件.801.txt
$sed-n-f break.sed big_text_file.txt
$wc-l大文本文件*.txt
100大文本文件.101.txt
100大文本文件.1.txt
100大文本文件.201.txt
100大文本文件.301.txt
100大文本文件.401.txt
100大文本文件.501.txt
100大文本文件.601.txt
100大文本文件.701.txt
61大文本文件.801.txt
861大文本文件.txt
总数1722

np.loadtxt
立即将所有内容加载到内存中。您需要一个迭代器。标准Python的
open
提供了一个迭代器接口。不过,您必须自己进行解析。期望的结果是什么?一组文件,每个文件都有来自第一列和第10、20、…n行的数据?您的n有多大?@9000:是的,您是正确的,这些文件有大约36000个条目
np.loadtxt
立即将所有内容加载到内存中。您需要一个迭代器。标准Python的
open
提供了一个迭代器接口。不过,您必须自己进行解析。希望得到什么结果?一堆文件,每个文件都有来自第一列的数据还有10,20,…n第一排?你的n有多大?@9000:是的,你是对的,文件大约有36000个条目。好吧,你一点也不好玩!:P,你一点也不好玩!:P