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
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,写了一个,有没有更简洁的?
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
纯sed
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
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
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
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
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