[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

gawk替换\字符问题

本帖最后由 shootman2 于 2018-9-27 12:57 编辑

工作中遇到这么一个问题。将一个文本文件中的数据通过mysql的load命令加载到mysql数据库中,
使用命令加载后,没报任何错误。但是在对数据进行查询操作的时候,发现有些数据加载是错位的。
仔细分析后发现,是因为分隔符前面有个转义符导致分隔符不起作用
例如:
文本内容:
aaa\|bbb|ccc|ddd

加载后结果为:
AAA         BBB     CCC   DDD
aaa|bbb   ccc       ddd    NULL

起初,我的解决方法是将 \ 字符替换成 \\ ,加载后就正常了。但是文件体积巨大,有3个G左右。
使用fr替换时报错,提示读取文件失败。后又替换成sed实现,sed虽然不报错,但是耗时太长,
最后换成gawk实现,耗时还算正常。但是替换总是不成功,也不报错。语句如下,请大神帮忙看看

gawk "{sub(/\\/,/\\\\/,$0);print $0}"  "F:\load_data.txt">123.txt

测试一下小文件,比如只有3行的,能成功吗?先排查一下语法错误
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# Batcher


    比如文本文件内容为:
    aaa\|bbb|ccc|ddd
    eee|fff|gg\\g|hhh
    iii|j\\jj|kkk|lll

    替换后就变成了
    aaa0|bbb|ccc|ddd
    eee|fff|gg1\g|hhh
    iii|j1\jj|kkk|lll

    应该是命令写的有问题!!!

TOP

回复 3# shootman2
gawk的全部替换 应该用gsub,第二个参数应该是要替换的字符串不要加//

我是在bash下的,在cmd下引号自行处理。
  1. gawk  '{gsub(/\\/,"\\\\",$0);print $0}' file
复制代码
另外用sed应该也差不多的吧,会有很大差别吗?大文件没试过。
  1. sed 's/\\/\\\\/g' file
复制代码

TOP

  1. sed "s/\\/\\\\/g" 1.txt > 2.txt
复制代码
楼主能否分享一下sed处理3GB文件大约需要多长时间?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  1. gawk "gsub(/\\/,\"\x5c\x5c\",$0)" 1.txt > 2.txt
复制代码
对比一下gawk需要多长时间?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表