现在有个需求就是需要去ftp上拿到压缩文件,然后解压后在文件中的数据的固定位置加入分隔符,然后在把加了分隔符的文件put到Hive的HDFS上的指定文件夹。假如这个文件里的数据是类似下面这种比较规律长度的,
112234455960okcs
213167258123ncaw
131743727942naia要在这些每行数据的固定位置插入分隔符,比如都在第4,第7,第9的位置,各行的分隔符位置都是一样的。请问整个流程用shell脚本能解决吗??哪位大神赐教一下,或者用其他什么脚本方便些??

解决方案 »

  1.   

    百度下sed的用法
      

  2.   

    echo "112234455960okcs
    213167258123ncaw
    131743727942naia" > /tmp/test.logsed -i 's/\(....\)\(...\)\(..\)/\1:\2:\3/' /tmp/test.log cat /tmp/test.log
    输出:
    1122:344:55960okcs
    2131:672:58123ncaw
    1317:437:27942naia
    . # 匹配一个非换行符的任意字符
    \1代表匹配到的第一个子串,依此类推匹配到的第二个结果就是 \2
      

  3.   

    再请问一下,我把sed命令直接放到.sh脚本中再执行.sh脚本结果sed命名没起作用,是需要转义之类的吗?网上搜了好久也没找到解决办法
      

  4.   

    最近一直忙没怎么上CSDN,不知道你的问题解决了没有,但是我没太明白的你说的是什么意思,我直接把 sed -i 's/\(....\)\(...\)\(..\)/\1:\2:\3/' /tmp/test.log 放在shell脚本中执行是可以的。你也可以用``把命令括起来试试,`sed -i 's/\(....\)\(...\)\(..\)/\1:\2:\3/' /tmp/test.log`