Chinaunix

标题: awk的gsub替换&字符的问题 [打印本页]

作者: udevu    时间: 2013-04-15 10:44
标题: awk的gsub替换&字符的问题
  1. cat urfile
  2. !@#$%^&*        ()|1|2|3|4|5|6
复制代码
希望的结果
  1. !@#$%^&*    ()
  2. !@#$%^&*    1
  3. !@#$%^&*    2
  4. !@#$%^&*    3
  5. !@#$%^&*    4
  6. !@#$%^&*    5
  7. !@#$%^&*    6
复制代码
我写的命令
  1. awk -vOFS="\t" -F"\t" '{a="\n"$1"\t";gsub(/\|/,a);print}'
复制代码
结果是
  1. !@#$%^&*        ()
  2. !@#$%^|*        1
  3. !@#$%^|*        2
  4. !@#$%^|*        3
  5. !@#$%^|*        4
  6. !@#$%^|*        5
  7. !@#$%^|*        6
复制代码
原因已经找到了,就是第一个字段中含有&字符,后面的替换中把它识别成替换以匹配内容了。
暂时再替换一次解决问题。
求规避这个问题的写法。
作者: yaozhibing41001    时间: 2013-04-15 10:56
感谢分享,
作者: waker    时间: 2013-04-15 11:02
http://www.gnu.org/software/gawk/manual/gawk.html#Gory-Details
作者: yestreenstars    时间: 2013-04-15 11:21
  1. awk -F "[\t|]" '{s=$1;for(i=2;i<=NF;i++)print s"\t"$i}'
复制代码
  1. awk -vRS="|" 'NR==1{s=$1}NR>1{$0=s"\t"$0}1'
复制代码
  1. sed -r 's/([^\t]*\t)([^|]*)\|(.*)/\1\2\n\1\3/;P;D'
复制代码

作者: reyleon    时间: 2013-04-15 11:49
  1. awk -vOFS="\t" '{s=$1;split($2,a,"|");for(i=1;i<=asorti(a,b);i++)print s,a[b[i]]}'
复制代码

作者: kernel69    时间: 2013-04-15 23:21
  1. perl -F'\||\s+' -ane 'print  map "$F[0]\t$_\n",@F[1..$#F]'  filename
复制代码

作者: udevu    时间: 2013-04-16 00:12
回复 3# waker
多谢 waker 大牛,那个链接是我想看的
也感谢其他几位的回答

多一次替换不可避免:
  1. awk -vOFS="\t" -F"\t" '{a="\n"$1"\t";gsub(/\&/,"\\\\&",a);gsub(/\|/,a);print}'
复制代码
或者
  1. awk -vOFS="\t" -F"\t" '{a="\n"$1"\t";gsub(/\|/,a);gsub(/\|/,"\\&");print}'
复制代码





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