Chinaunix

标题: sed和awk如何实现如下字符串的转换 [打印本页]

作者: yjs_sh    时间: 2010-05-04 20:27
标题: sed和awk如何实现如下字符串的转换
如何用sed和awk实现如下字符串转换
原始字符串: slot-00 4 slot-01 8 slot-02 5 slot-03 8 slot-04 8 slot-05 8
输出字符串:['slot-00',4],['slot-01',8],['slot-02',5],['slot-03',8],['slot-04',8],['slot-05',8]

谢谢!
作者: Shell_HAT    时间: 2010-05-04 20:39

  1. awk 'BEGIN{OFS=","}{for(i=1;i<=NF;i+=2)$i="[\x27"$i"\x27";for(i=2;i<=NF;i+=2)$i=$i"]";}1' urfile
复制代码

作者: yjs_sh    时间: 2010-05-04 20:43
多谢楼上的!自己刚才研究了一下awk,写了一个,有没有更简洁的?
  1. awk '{for(i=1;i<=NF;i=i+2){print "[""'\''"$i"'\''"","$i+1"]"}}' host1|tr '\r\n' ','|sed 's/.$//'
复制代码

作者: yjs_sh    时间: 2010-05-04 20:47
2楼的代码中最后一个1,代表什么意思啊?
作者: bbgg1983    时间: 2010-05-04 20:53
  1. 纯sed
  2. sed -r "s/(s[^ ]+) (.)/\['\1',\2]/g" file|sed 's/ /,/g'
复制代码

作者: yjs_sh    时间: 2010-05-04 21:00
看来要好好学一学sed和awk了
作者: lkk2003rty    时间: 2010-05-04 21:01
  1. sed "s/slot-[0-9]\{2\}/['&',/g;s/ \([0-9]\{1\}\) /\1],/g;s/$/]/" file
复制代码
ls的那个你理解成 print $0就行了
作者: where27    时间: 2010-05-04 21:22
本帖最后由 where27 于 2010-05-04 21:25 编辑

回复 1# yjs_sh
  1. awk '{for(i=1;i<=NF;i+=2)printf "[\x27"$i"\x27"","$(i+1)"]"","}' file|sed 's/.$//'
复制代码
最后那个逗号还是没办法去掉,哎,晚节不保啊,不知道有没什么方法直接写到awk里面去了
作者: Shell_HAT    时间: 2010-05-04 21:26
回复 4# yjs_sh


参考:
http://bbs.chinaunix.net/viewthread.php?tid=1552660#pid11095215
作者: iori809    时间: 2010-05-04 21:28
awk '{for(i=1;i<=NF;i++){if(i%2==1){printf "[""\047"$i"\047"","}else{printf $i"],"}}}'
呵呵
作者: bbgg1983    时间: 2010-05-04 22:48
回复 8# where27
  1. awk -v OFS="," '{for(i=1;i<=NF;i++)$i=(i%2==1)?"[\047"$i"\047":$i"]"}1' file
复制代码

作者: where27    时间: 2010-05-05 08:53
回复 11# bbgg1983


    好想法,学习了!
作者: ls2012    时间: 2010-05-05 15:22
sed "s/\([^ ]*\) \([0-9]*\) */[\'\1\',\2],/g" | sed 's/,$//'
作者: 夏天的绿树叶    时间: 2010-05-06 00:12
提示: 作者被禁止或删除 内容自动屏蔽
作者: expert1    时间: 2010-05-17 10:17
这个留个记号,慢慢看
作者: BangBull    时间: 2010-08-03 10:53
  1. echo "slot-00 4 slot-01 8 slot-02 5 slot-03 8 slot-04 8 slot-05 8" | sed "s/\([a-z]\{4\}-[0-9]\{2\}\) \([0-9]\)/['\1',\2],/g" | sed 's/,$//'
复制代码





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