免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6903 | 回复: 10
打印 上一主题 下一主题

[文本处理] 读取文件结束到文件尾的判断 [复制链接]

论坛徽章:
5
金牛座
日期:2015-07-03 13:32:00卯兔
日期:2015-07-03 13:32:17程序设计版块每日发帖之星
日期:2015-11-29 06:20:0015-16赛季CBA联赛之同曦
日期:2015-12-15 09:36:06CU十四周年纪念徽章
日期:2016-07-06 17:18:48
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-01-26 15:58 |只看该作者 |倒序浏览
我用read去读取文件,我想得到以下效果
例如我第一次读取到文件的1000行,下一次我不希望从第1行开始读,而是想从1001行开始读,该怎么做?
不用read能得到类似效果的都可以。
  1. while read LINE
  2. do
  3. .....
  4. done < $filename
复制代码

论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
2 [报告]
发表于 2016-01-26 16:02 |只看该作者
下一次是哪一次?同一进程还是?
可以把这次读到多少行写进一个文件, 下次读的时候读取该文件就知道上一次读到了哪一行

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
3 [报告]
发表于 2016-01-26 16:07 |只看该作者
回复 1# seanking1987


    每次读完,就删除1000行......
    或者将文件以1000行切割成N个小文件......

论坛徽章:
5
金牛座
日期:2015-07-03 13:32:00卯兔
日期:2015-07-03 13:32:17程序设计版块每日发帖之星
日期:2015-11-29 06:20:0015-16赛季CBA联赛之同曦
日期:2015-12-15 09:36:06CU十四周年纪念徽章
日期:2016-07-06 17:18:48
4 [报告]
发表于 2016-01-26 16:07 |只看该作者
回复 2# elu_ligao

下一次就是该shell再次执行的时候。
记录一下本次shell读取的行数,下一次shell运行的时候对源文件进行截取后再读取,这样是可以的。肯定比从文件头开始快的多

   

论坛徽章:
12
程序设计版块每日发帖之星
日期:2016-01-28 06:20:00程序设计版块每周发帖之星
日期:2016-03-07 16:29:28程序设计版块每日发帖之星
日期:2016-02-04 06:20:00程序设计版块每日发帖之星
日期:2016-02-02 06:20:00每周论坛发贴之星
日期:2016-01-31 22:22:00程序设计版块每日发帖之星
日期:2016-02-01 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00每日论坛发贴之星
日期:2016-01-30 06:20:00程序设计版块每日发帖之星
日期:2016-01-30 06:20:00每日论坛发贴之星
日期:2016-01-29 06:20:00程序设计版块每日发帖之星
日期:2016-01-29 06:20:0015-16赛季CBA联赛之福建
日期:2016-04-06 14:19:05
5 [报告]
发表于 2016-01-26 16:07 |只看该作者
问题同上,下一次是哪一次可以具体一点么?
知道行数就可以用下面的打印了
awk 'NR>=1001{print}' file
sed -n '1001,$'p file

论坛徽章:
5
金牛座
日期:2015-07-03 13:32:00卯兔
日期:2015-07-03 13:32:17程序设计版块每日发帖之星
日期:2015-11-29 06:20:0015-16赛季CBA联赛之同曦
日期:2015-12-15 09:36:06CU十四周年纪念徽章
日期:2016-07-06 17:18:48
6 [报告]
发表于 2016-01-26 16:08 |只看该作者
回复 3# 关阴月飞

恩,是个办法。
不过不能对源文件进行修改。
   

论坛徽章:
12
程序设计版块每日发帖之星
日期:2016-01-28 06:20:00程序设计版块每周发帖之星
日期:2016-03-07 16:29:28程序设计版块每日发帖之星
日期:2016-02-04 06:20:00程序设计版块每日发帖之星
日期:2016-02-02 06:20:00每周论坛发贴之星
日期:2016-01-31 22:22:00程序设计版块每日发帖之星
日期:2016-02-01 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00每日论坛发贴之星
日期:2016-01-30 06:20:00程序设计版块每日发帖之星
日期:2016-01-30 06:20:00每日论坛发贴之星
日期:2016-01-29 06:20:00程序设计版块每日发帖之星
日期:2016-01-29 06:20:0015-16赛季CBA联赛之福建
日期:2016-04-06 14:19:05
7 [报告]
发表于 2016-01-26 16:22 |只看该作者
回复 6# seanking1987


    那就简单了,每次运行完shell都把当前读取到的最后一行数输出到另一个文件中就可以了,然后每次调用shell先检查这个文件里面的数据就知道上次读到哪里了,第一次的话就另外写个判断就好。

论坛徽章:
5
金牛座
日期:2015-07-03 13:32:00卯兔
日期:2015-07-03 13:32:17程序设计版块每日发帖之星
日期:2015-11-29 06:20:0015-16赛季CBA联赛之同曦
日期:2015-12-15 09:36:06CU十四周年纪念徽章
日期:2016-07-06 17:18:48
8 [报告]
发表于 2016-01-26 16:42 |只看该作者
本帖最后由 seanking1987 于 2016-01-26 16:44 编辑

回复 7# ydzcjj

是这样的,谢谢。还有个sed的问题~~试不成功
  1. vi test.sh
  2. #! /bin/bash

  3. line=2
  4. filename="test.txt"

  5. #! /bin/bash

  6. line=2
  7. filename="test.txt"

  8. sed -n '\${line},\sh test.sh后报错sed:-e 表达式 #1,字符 12:unterminated address regex
  9. 该怎么写,截取从第二行到结尾,第二行这个数字是变量p $filename
复制代码
sh test.sh后报错sed:-e 表达式 #1,字符 12:unterminated address regex
该怎么写,截取从第二行到结尾,第二行这个数字是变量

论坛徽章:
5
金牛座
日期:2015-07-03 13:32:00卯兔
日期:2015-07-03 13:32:17程序设计版块每日发帖之星
日期:2015-11-29 06:20:0015-16赛季CBA联赛之同曦
日期:2015-12-15 09:36:06CU十四周年纪念徽章
日期:2016-07-06 17:18:48
9 [报告]
发表于 2016-01-26 16:46 |只看该作者
论坛有BUG。。。怎么发都会错乱我最后写的几个字符。可能跟特殊符号有关,就是我想截取第二行到结尾,但是第二行是变量,带进去sed命令报错

论坛徽章:
12
程序设计版块每日发帖之星
日期:2016-01-28 06:20:00程序设计版块每周发帖之星
日期:2016-03-07 16:29:28程序设计版块每日发帖之星
日期:2016-02-04 06:20:00程序设计版块每日发帖之星
日期:2016-02-02 06:20:00每周论坛发贴之星
日期:2016-01-31 22:22:00程序设计版块每日发帖之星
日期:2016-02-01 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00每日论坛发贴之星
日期:2016-01-30 06:20:00程序设计版块每日发帖之星
日期:2016-01-30 06:20:00每日论坛发贴之星
日期:2016-01-29 06:20:00程序设计版块每日发帖之星
日期:2016-01-29 06:20:0015-16赛季CBA联赛之福建
日期:2016-04-06 14:19:05
10 [报告]
发表于 2016-01-26 16:54 |只看该作者
回复 8# seanking1987

额  其实我的意思是
test.sh
if [ -e linecount.txt ]; then
    echo "1" > linecount.txt
fi
line=`cat linecount.txt`
sed -n '${line},[你要读到的那行]'p file
echo “[你读到的那行]” > linecount.txt


差不多就这样  至于你读到的那行就要根据你其他判断来实现了  具体你应该清楚的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP