Chinaunix
标题:
awk的gsub替换&字符的问题
[打印本页]
作者:
udevu
时间:
2013-04-15 10:44
标题:
awk的gsub替换&字符的问题
cat urfile
!@#$%^&* ()|1|2|3|4|5|6
复制代码
希望的结果
!@#$%^&* ()
!@#$%^&* 1
!@#$%^&* 2
!@#$%^&* 3
!@#$%^&* 4
!@#$%^&* 5
!@#$%^&* 6
复制代码
我写的命令
awk -vOFS="\t" -F"\t" '{a="\n"$1"\t";gsub(/\|/,a);print}'
复制代码
结果是
!@#$%^&* ()
!@#$%^|* 1
!@#$%^|* 2
!@#$%^|* 3
!@#$%^|* 4
!@#$%^|* 5
!@#$%^|* 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
awk -F "[\t|]" '{s=$1;for(i=2;i<=NF;i++)print s"\t"$i}'
复制代码
awk -vRS="|" 'NR==1{s=$1}NR>1{$0=s"\t"$0}1'
复制代码
sed -r 's/([^\t]*\t)([^|]*)\|(.*)/\1\2\n\1\3/;P;D'
复制代码
作者:
reyleon
时间:
2013-04-15 11:49
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
perl -F'\||\s+' -ane 'print map "$F[0]\t$_\n",@F[1..$#F]' filename
复制代码
作者:
udevu
时间:
2013-04-16 00:12
回复
3#
waker
多谢 waker 大牛,那个链接是我想看的
也感谢其他几位的回答
多一次替换不可避免:
awk -vOFS="\t" -F"\t" '{a="\n"$1"\t";gsub(/\&/,"\\\\&",a);gsub(/\|/,a);print}'
复制代码
或者
awk -vOFS="\t" -F"\t" '{a="\n"$1"\t";gsub(/\|/,a);gsub(/\|/,"\\&");print}'
复制代码
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2