我有一个包含数千个数字值的文本文件 1 2 3 4 五 。 。 。 。 Ñ
我知道我们可以使用awk来分隔这些值。但有没有一种方法可以在不同的文本文件中获取前10,20,40,80,160 ....,n值。
我使用python这样做但是分离这些文件需要花费很多时间。这是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中有更好的方法吗?先感谢您!
答案 0 :(得分:1)
您没有提供任何样本输入和预期输出,并且您的问题文本含糊不清,所以这只是猜测,但这可能是您正在寻找的内容:
$ seq 1000 | awk -v c=10 'NR==c{print; c=2*c}'
10
20
40
80
160
320
640
如果没有,请编辑您的问题以澄清。
答案 1 :(得分:1)
低效但快速实施apprach
s=5; for i in {1..10}; do ((s*=2)); head -$s file > sub$i; done
由于文件重叠,会有更好的方法,但根据文件的大小和需要重复的次数,这可能已经足够了。
答案 2 :(得分:1)
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