我不知道如何用sed
因此,我想使用 for 循环执行以下任务:
sed -n '1,200p' big_file.txt > 1to200.txt sed -n '201,400p' big_file.txt > 201to400.txt sed -n '401,600p' big_file.txt > 401to600.txt sed -n '601,800p' big_file.txt > 601to800.txt sed -n '801,1000p' big_file.txt > 801to1000.txt sed -n '1001,1200p' big_file.txt > 1001to1200.txt sed -n '1201,1400p' big_file.txt > 1201to1400.txt sed -n '1401,1600p' big_file.txt > 1401to1600.txt sed -n '1601,1800p' big_file.txt > 1601to1800.txt sed -n '1801,2000p' big_file.txt > 1801to2000.txt sed -n '2001,2200p' big_file.txt > 2001to2200.txt sed -n '2201,2400p' big_file.txt > 2201to2400.txt sed -n '2401,2600p' big_file.txt > 2401to2600.txt sed -n '2601,2800p' big_file.txt > 2601to2800.txt sed -n '2801,3000p' big_file.txt > 2801to3000.txt sed -n '3001,3200p' big_file.txt > 3001to3200.txt sed -n '3201,3400p' big_file.txt > 3201to3400.txt sed -n '3401,3600p' big_file.txt > 3401to3600.txt sed -n '3601,3800p' big_file.txt > 3601to3800.txt sed -n '3801,4000p' big_file.txt > 3801to4000.txt
我试过的:
j=0
for ((i=1;i<=3801;i=$i+200))
do
#echo $m,$n
j=$j + 200
sed -n '$i,$j p' big_file.txt > $ito$j.txt
done
请帮我做这件事。也请解释一下。
我会用一个 awk 程序来做到这一点,而不是调用 sed N次
这应该会更快,因为您只需要处理一次大文件,而不是 4000÷200=20 次。
关。
在
j=$j + 200
中,您需要显式调用算术展开,即j=$(( j + 200 ))
。在
sed -n '$i,$j p' big_file.txt > $ito$j.txt
, 1) 中,您需要在 的参数中使用双引号而不是单引号sed
,因为否则$
将按字面意思使用,并且不会扩展变量;2) 你需要用大括号括起来i
,因为$ito
这将是一个有效的变量扩展。此外,在算术上下文中,您不需要(并且可能不应该)
$
在变量名前面使用。所以,我将其重写为:
就像其他人评论的那样,可能有更好的方法来做到这一点,因为现在您为每个分割成的部分完整地遍历文件一次。