Chinaunix

标题: sed如何计数呢? [打印本页]

作者: 122285969    时间: 2010-08-13 11:12
标题: sed如何计数呢?
例,a文件内容如下:

A B C D E
C D A B
E D E A A
Y A S D Z A C A

其中有7个A字符,要怎么实现在每个A字符后面标记计数呢?如:

A(1) B C D E
C D A(2) B
E D E A(3) A(4)
Y A(5) S D Z A(6) C A(7)

谢谢……
作者: 网中淫    时间: 2010-08-13 11:20
打个点,计
请看tim作品
作者: expert1    时间: 2010-08-13 11:20
awk简单点,不过把出现的次数打印在A后面有点难度。
作者: 122285969    时间: 2010-08-13 11:22
就是看了tim的教程才想到这个问题,不知道如何解决。
作者: lkk2003rty    时间: 2010-08-13 11:23
awk '{for(i=1;i<=NF;i++)if($i=="A")$i=$i"("++cnt")"}1' file
作者: 122285969    时间: 2010-08-13 11:28
回复 5# lkk2003rty


    AWK 确实不错, SED 有没有办法呢?
作者: wtuter    时间: 2010-08-13 11:42
回复 1# 122285969


    awk '/A/{i++;gsub(/A/,"A ""("i") ",$0);print}'
作者: ly5066113    时间: 2010-08-13 12:14

  1. $ cat urfile
  2. A B C D E
  3. C D A B
  4. E D E A A
  5. Y A S D Z A C A
  6. $ sed -nf test.sed urfile
  7. A(1) B C D E
  8. C D A(2) B
  9. E D E A(3) A(4)
  10. Y A(5) S D Z A(6) C A(7)
  11. $ cat test.sed
  12. #! /bin/sed -f
  13. :a
  14. /\<A\>/{
  15.         x
  16.         /^$/s/^/1/
  17.         G
  18.         s/\<A\>/&\n/
  19.         s/^\([0-9][0-9]*\)\n\(.*\)\(A\n\)/\1\n\2A\1/
  20.         h
  21.         s/\n.*/-1/
  22.         s/$/-;9aaaaaaaaa98aaaaaaaa87aaaaaaa76aaaaaa65aaaaa54aaaa43aaa32aa21a100/
  23.         : add
  24.         /^--[^a]/!{
  25.                 s/^\([0-9a]*\)\([0-9]\)-\([^-]*\)-\(.*;.*\2\(a*\)\2.*\)/\1-\3-\5\4/
  26.                 s/^\([^-]*\)-\([0-9a]*\)\([0-9]\)-\(.*;.*\3\(a*\)\3.*\)/\1-\2-\5\4/
  27.                 s/-\(aaaaaaaaa\(a\)\)\{0,1\}\(a*\)\([0-9]*;.*\([0-9]\)\3\5\)/-\2\5\4/
  28.                 b add
  29.         }
  30.         s/^--\([^;]*\);.*/\1/
  31.         x
  32.         ba
  33. }
  34. s/.*\n//
  35. s/\(A\)\([0-9]*\)/\1(\2)/g
  36. p
复制代码

作者: expert1    时间: 2010-08-13 12:15
tim好强大,仰望之。
作者: expert1    时间: 2010-08-13 12:24
回复 7# wtuter


    O(∩_∩)O~,这个想法好帅啊
作者: 122285969    时间: 2010-08-13 13:16


都是神人啊,顶礼膜拜之!

得好好消化了。
作者: 122285969    时间: 2010-08-13 13:25
很惭愧,初看只看懂了  lkk2003rty 写的这个。看来道路还很长啊,自我激励!
作者: 99超人    时间: 2010-08-13 14:26
提示: 作者被禁止或删除 内容自动屏蔽
作者: welcome008    时间: 2010-08-13 14:42
/\<A\>/

/A/

啥区别?
作者: 122285969    时间: 2010-08-13 15:54
回复 14# welcome008


    /\<A\>/ 匹配一个单词,默认以空格或者TAB分隔。也就是说A前后没东西了,只有分隔符。比如:A B C 这样的行

   /A/ 只要含有A的字符都能匹配。也包括 /\<A\>/ 匹配的内容。比如: ABC 或者 A B C 或者 A 这样的行

   不知道解释得对不对,
作者: welcome008    时间: 2010-08-13 16:05
谢了
作者: 好看的附件    时间: 2010-08-13 16:07
全是神人,mark,等待学习
作者: davidbeckham921    时间: 2010-08-13 16:12
ly5066113 发表于 2010-08-13 12:14



    基本无敌了,一顿仰视!~~
作者: cainoliu    时间: 2010-08-13 16:28
都好NB啊
作者: syshack    时间: 2010-08-13 22:52

发个表情膜拜Tim
作者: ywlscpl    时间: 2010-08-14 08:20
  1. awk -v RS=A '{printf $0RT"("NR")"}' file
复制代码

作者: saliana    时间: 2010-08-14 10:50
强大...哈哈
魔力私服   破天一剑私服   石器时代私服
作者: wsysx    时间: 2010-08-14 14:35
就是看了tim的教程才想到这个问题,不知道如何解决。
122285969 发表于 2010-08-13 11:22



    有链接么?
作者: 122285969    时间: 2010-08-14 23:09
回复 23# wsysx

http://bbs.chinaunix.net/thread-1762006-1-2.html

Tim前不久发布的,新鲜着呢
作者: zzy7186    时间: 2010-10-05 19:12
回复 10# expert1


    崇拜啊!
作者: dibug    时间: 2010-10-05 20:22

  1. root@yeah /cygdrive/d
  2. $ cat a.txt
  3. A B C D E
  4. C D A B
  5. E D E A A
  6. Y A S D Z A C A


  7. root@yeah /cygdrive/d
  8. $ n=0;while read line;do a=($line);for i in ${a[@]};do [[ $i == "A" ]] && { ((n
  9. ++));echo -n $i"($n)"' ' ; }|| echo -n $i' ';done;echo;done <a.txt
  10. A(1) B C D E
  11. C D A(2) B
  12. E D E A(3) A(4)
  13. Y A(5) S D Z A(6) C A(7)


  14. root@yeah /cygdrive/d
  15. $
复制代码





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