Shell如何实现从文件中的第n行开始读取记录?

现有一个文件datafile.dat,里头可能有上百万行的数据记录。由于文件太大,不可能一次把所有内容都加载下来,所以只能对其逐行读取并处理。为提高执行速度,考虑对这个大... 现有一个文件datafile.dat,里头可能有上百万行的数据记录。由于文件太大,不可能一次把所有内容都加载下来,所以只能对其逐行读取并处理。为提高执行速度,考虑对这个大数据文件进行并发处理,即让脚本1处理第1-10W行,脚本2处理第10W-20W行……脚本10处理第90W~100W行。

这就需要在脚本n中把文件的行指针自动预先指向第n万行的记录后才能开始读取。请问shell中有没有这个功能呢?谢谢!
展开
 我来答
百度网友2b7192e7b5
推荐于2018-02-27 · TA获得超过1917个赞
知道小有建树答主
回答量:496
采纳率:0%
帮助的人:354万
展开全部

可以用C来实现,当然,实现的方法还是跳过这些行,如下:

FILE *fp = fopen("datafile.dat", "r");
if(fp == NULL) 
{
    printf("open file error!\n");
    exit(1);  

while(!foef(fp))
{
    static int line_count = 0;
    memset(lines, 0, sizeof(lines)); 
    line_count ++;//第一次就是第一行
    /* 取每行的内容 */ 
    if(!fgets(lines, fp, 1024)
        break; 
    /* 小于100000就继续下一行 */ 
    if( line_count < 100000 )
        continue; 

    if( line_count >= 200000 )
        break;//大于20万就退出该循环
    ///下面是处理的过程。

}

 

这个简短程序就实现了取第10万行到第20万行的数据。这10万和20万可以用参数带入,比如这个程序运行名是do_proc,那参数可以这么带:

do_proc 100000 200000

sunnyhouyq
2013-12-16 · TA获得超过648个赞
知道小有建树答主
回答量:515
采纳率:100%
帮助的人:520万
展开全部
tail -n -3 datafile.dat | head -n 30

从第3行开始取30行

sed -n '3,5p' datafile.dat

显示第3到5行

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
videlord
2013-12-16 · TA获得超过1336个赞
知道大有可为答主
回答量:1518
采纳率:66%
帮助的人:435万
展开全部
好多命令都能实现,head, tail, sed, awk等,比如
awk 'NR > n' datafile.dat | (whaterver you want to do)
不过应该也是一行行读过去,丢掉(或者说不予处理)跳过的行

你要用文件指针,那估计你得自己写个程序了;实现你的功能不难,c程序,几十行足够
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式