Chinaunix

标题: 同时向数百个超大txt文本文件行首插入一行相同的字符串,大神呢? [打印本页]

作者: wenjun3000    时间: 2016-08-18 09:28
标题: 同时向数百个超大txt文本文件行首插入一行相同的字符串,大神呢?
同时向数百个超大txt文本文件行首插入一行相同的字符串,文本格式utf-8,举例:
a.txt内容如下:
你好
哪里
南京
b.txt内容如下:
家乡
哪里
北京
行首同时插入一行字符串"地域旅游人数统计"
结果为
a.txt内容如下:
地域旅游人数统计
你好
哪里
南京
b.txt内容如下:
地域旅游人数统计
家乡
哪里
北京

数百个超大txt同时插入,请大神给代码!
作者: moperyblue    时间: 2016-08-18 10:11
  1. sed -i '1i\地域旅游人数统计' *txt
复制代码

作者: wenjun3000    时间: 2016-08-18 10:22
回复 2# moperyblue


多谢啊,,能否直接输入文本文件路径,譬如:d\xxx\*.txt
作者: moperyblue    时间: 2016-08-18 10:42
回复 3# wenjun3000


    可以
  1. sed -i '1i\地域旅游人数统计' /cygdrive/d/xxx/*txt
  2. #或
  3. sed -i '1i\地域旅游人数统计' "d:\xxx\*txt"
复制代码

作者: wenjun3000    时间: 2016-08-18 11:51
回复 4# moperyblue


如果不是插入一行字符串,而是插入相同的文本文件里面的内容,应该怎么改?
譬如批量插入d:\yyy\x.txt里面的内容 到   d\xxx\*.txt
作者: moperyblue    时间: 2016-08-18 12:21
本帖最后由 moperyblue 于 2016-08-18 12:22 编辑

回复 5# wenjun3000

d:\yyy\x.txt 要插到 d:\xxx\*.txt的什么位置?
作者: wenjun3000    时间: 2016-08-18 12:32
回复 6# moperyblue


跟原来一样,每个txt文件第一行前插入,原来插入一行,现在插入多行,多行文本放在d:\yyy\x.txt
作者: wenjun3000    时间: 2016-08-18 12:33
回复 6# moperyblue


另外,插入效率偏低,200个十几M的文本文件,运行后,一个小时,还没结束,能否多线程插入呢   
作者: moperyblue    时间: 2016-08-18 13:47
回复 8# wenjun3000


看一下替换多少个文件了
grep -l "地域旅游人数统计" d:/xxx/*.txt|wc -l

看一下内存的使用情况

可以试一下这样 会不会更好一些?
for i in `ls d:/xxx/*txt`;do sed -i '1i\地域旅游人数统计'  "$i";done
作者: wenjun3000    时间: 2016-08-18 13:49
回复 9# moperyblue


花了近两小时完成了,虽然慢,但没有错误,多谢
作者: 杰瑞26    时间: 2016-08-18 15:35
  1. find . -name "*.txt" -exec sed -i '1i\地域旅游人数统计' {} \;
复制代码

作者: Zivix0406    时间: 2016-08-18 16:29
用sed很简单的
2楼答案很完美
作者: moperyblue    时间: 2016-08-18 22:55
本帖最后由 moperyblue 于 2016-08-18 22:56 编辑

回复 7# wenjun3000
for i in `find /cygdrive/d/xxx -type f -name "*txt"`;do ed -s "$i" <<< $'0r /cygdrive/d/yyy/x.txt\nwq';done
作者: wenjun3000    时间: 2016-08-19 06:43
回复 13# moperyblue

出现以下错误

QQ截图20160819064208.jpg (86.25 KB, 下载次数: 140)

QQ截图20160819064208.jpg

作者: moperyblue    时间: 2016-08-19 09:11
本帖最后由 moperyblue 于 2016-08-19 09:12 编辑

回复 14# wenjun3000


在cygwin中安装ed命令
  1. for i in `find /cygdrive/d/xxx -type f -name "*txt"`;do sed -i '1{x;s/.*/cat /cygdrive/d/yyy/x.txt/ep;x}' "$i" ;done
复制代码

作者: wenjun3000    时间: 2016-08-19 09:18
回复 15# moperyblue


不会安装ed命令,百度中也没有找到相关资料
新代码运行错误如下:

作者: moperyblue    时间: 2016-08-19 09:29
回复 16# wenjun3000
  1. for i in `find /cygdrive/d/xxx -type f -name "*txt"`;do sed -i '1{x;s#.*#cat /cygdrive/d/yyy/x.txt#ep;x}' "$i" ;done
复制代码

作者: wenjun3000    时间: 2016-08-19 09:42
回复 17# moperyblue


可以了,多谢
作者: moperyblue    时间: 2016-08-19 09:56
回复 16# wenjun3000


    双击 setup-x86_64.exe 一直 默认点击 直到 http://velep.com/archives/747.html 中第六步



再 默认点击 直到完成

ok

作者: wenjun3000    时间: 2016-08-19 10:11
好的,多谢
作者: woaimaidong    时间: 2016-09-02 14:04
下一步可以考虑优化。
作者: xdsnet    时间: 2016-09-05 21:33
楼主还没有区分开同时和批量的意思,
同时只能是多线程做,每个都做同样的动作,有较严格的时间要求上才能说同时。
批量是可以一个一个做,但对所有都做。
其实楼主要的是批量,并不要求同时。
作者: 拓荒鱼    时间: 2017-03-31 01:21
文件太大没法快
作者: sditmaner    时间: 2017-03-31 11:07
回复 2# moperyblue




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2