Chinaunix

标题: 数据处理 [打印本页]

作者: hover_sky    时间: 2011-07-06 17:39
标题: 数据处理
本帖最后由 hover_sky 于 2011-07-06 17:43 编辑

  1. #cat tt.txt
  2. dddddddddddd
  3. ---Get upload info: /srv/add/ff/gg/hh/56/477/6517477/1987784/book/440205|440205|1|6517477|1987784|5|0|0|0
  4. fffffffffffffffffffffffffff
复制代码
用sed and awk要得到的结果:

  1. #file=`grep "Get upload info:" tt.txt|awk -F ":|\|" '{print $2;}'`;echo ${file%/*};
  2. /srv/add/ff/gg/hh/56/477/6517477/1987784/book/
  3. #sed -r 's/.*:(.*\/)[0-9]{2,}(|.*)*/\1/g' tt.txt   
  4. /srv/add/ff/gg/hh/56/477/6517477/1987784/book/
复制代码
请帮忙精简,谢谢
作者: zooyo    时间: 2011-07-06 18:15
提示: 作者被禁止或删除 内容自动屏蔽
作者: lionfun    时间: 2011-07-06 18:16
本帖最后由 lionfun 于 2011-07-06 18:17 编辑

回复 1# hover_sky
  1. sed -ne '/info:/{s@[^/]*\(/.*/\)[^/]*@\1@g;p}' tt.txt
复制代码

作者: yinyuemi    时间: 2011-07-06 23:33
using bash
  1. $ echo 'dddddddddddd
  2. ---Get upload info: /srv/add/ff/gg/hh/56/477/6517477/1987784/book/440205|440205|1|6517477|1987784|5|0|0|0
  3. fffffffffffffffffffffffffff' |\
  4. while read line
  5. do
  6.     [[ $line =~ "---Get" ]] && file=${line##* /} && file=${file%/*} && echo $file
  7. done
  8. srv/add/ff/gg/hh/56/477/6517477/1987784/book
复制代码

作者: Shell_HAT    时间: 2011-07-07 01:37
回复 1# hover_sky
  1. file=`awk -F '[:\\\|]' '/Get upload info:/{print $2;}' urfile`
  2. echo ${file%/*}
复制代码

作者: rdcwayx    时间: 2011-07-07 08:16
  1. awk '/info:/{split($NF,a,"|");system("dirname "a[1]"")}' infile
复制代码

作者: huang_wunix    时间: 2011-07-07 09:30
回复  hover_sky
Shell_HAT 发表于 2011-07-07 01:37



    能解释一下 F '[:\\\|]'  中括号里面的内容吗? 平时值看到一个符合,这次看到多个 看不懂。
   还有 ${file%/*} 里面的%/* 是什么意思?
作者: 南极雨    时间: 2011-07-07 09:51
回复 1# hover_sky


sed -n 's#.*\(/s.*/\).*#\1#p' tt.txt
作者: ywlscpl    时间: 2011-07-07 10:05
本帖最后由 ywlscpl 于 2011-07-07 10:11 编辑

awk '/Get upload/{split($NF,m,"|");sub(/\/[^\/]*$/,"",m[1]);print m[1]}' file
作者: hover_sky    时间: 2011-07-07 10:08
能解释一下 F '[:\\\|]'  中括号里面的内容吗? 平时值看到一个符合,这次看到多个 看不懂。
   ...
huang_wunix 发表于 2011-07-07 09:30



    1, 是用: \  |作为分隔符吧?但这里,不需要用\作为分隔符。。。有其他用意?

     2, 拿掉右边第一个/及其右边的字符串,详见   http://bbs.chinaunix.net/viewthr ... p;page=7#pid1617953
作者: magnet2008    时间: 2011-07-07 10:24
cat 1.txt |perl -ne '{if(m#/.*/#){print "$&\n"}}'
/srv/add/ff/gg/hh/56/477/6517477/1987784/book/
作者: huang_wunix    时间: 2011-07-07 10:29
非常感谢!
作者: blackold    时间: 2011-07-07 10:37
回复 1# hover_sky


    LZ不是自己写出来了吗?
作者: hover_sky    时间: 2011-07-07 10:41
回复  hover_sky


    LZ不是自己写出来了吗?
blackold 发表于 2011-07-07 10:37



    求精简
作者: blackold    时间: 2011-07-07 11:22
try:
awk:
$ awk -F/ -v OFS=/ '/info/{$1=$NF="";print}' urfile
/srv/add/ff/gg/hh/56/477/6517477/1987784/book/


sed:
$ sed '/info:/! d;s/^[^/]*//;s/[^/]*$//' urfile
/srv/add/ff/gg/hh/56/477/6517477/1987784/book/

作者: caoshaocong    时间: 2011-07-07 18:40
回复 15# blackold


    黑哥 有一周没露面了吧  终于又出现了
作者: blackold    时间: 2011-07-07 22:16
回复 16# caoshaocong


    呵呵,最近有点忙啊。




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