Chinaunix
标题:
上下行合并的问题
[打印本页]
作者:
lnzfm
时间:
2015-03-16 15:45
标题:
上下行合并的问题
1:id=123
id=123
2:id=111
id=111
3:id=123
id=234
id=456
请教这个怎么弄成
1:id=123 id=123
2:id=111 id=111
3:id=123 id=234 id=456
作者:
我是一隻羊
时间:
2015-03-16 15:54
本帖最后由 我是一隻羊 于 2015-03-16 16:10 编辑
sed -r '{:a;N;$!ba;s/\n(id)/ \1/g}' inputfile
复制代码
awk '/:/{a[++i]=$0;next}{a[i]=a[i]" "$0}END{for(i=0;i++<length(a);)print a[i]}' inputfile
复制代码
作者:
zhxjfl
时间:
2015-03-16 16:03
本帖最后由 zhxjfl 于 2015-03-16 16:52 编辑
delete.............
作者:
lnzfm
时间:
2015-03-16 16:16
多谢,写的很漂亮,学习了
作者:
bulletmarquis
时间:
2015-03-16 16:23
回复
3#
zhxjfl
目测最后三行会有问题
作者:
bulletmarquis
时间:
2015-03-16 16:25
回复
1#
lnzfm
awk '/^[0-9]/{printf "\n"$0;next}{printf " "$0}END{print ""}'
复制代码
作者:
zxy877298415
时间:
2015-03-16 16:25
awk -v RS='[0-9]+:' 'NR>1{printf p;for(i=1;i<=NF;i++) printf $i" ";print ""}{p=RT}' file
1:id=123 id=123
2:id=111 id=111
3:id=123 id=234 id=456
复制代码
回复
1#
lnzfm
作者:
liion631818
时间:
2015-03-16 17:29
px@ubuntu:~/bash-script$ awk -vRS="[0-9]+:" -vOFS=" " '{NF+=0;if($0!="")print ORT, $0; ORT=RT}' testfile
1: id=123 id=123
2: id=111 id=111
3: id=123 id=234 id=456
复制代码
作者:
ly5066113
时间:
2015-03-16 17:33
sed ':a;N;/\ni/s/\n/ /;ta;P;D' file
复制代码
作者:
reyleon
时间:
2015-03-16 18:11
sed -r ':1;N;/\n[0-9]/!s/\n/ /;t1;P;D' file
复制代码
作者:
wz64050010
时间:
2015-03-16 19:31
回复
2#
我是一隻羊
大神麻烦问一下。
这样写for(i=0;i++<length(a)
和for(i=0;i<length(a);i++)有啥区别?我把最前面++i改成i++修改了一下,会无限的刷空行,出一个空行我能理解。。出一片空行有点不能理解了
作者:
我是一隻羊
时间:
2015-03-16 22:10
本帖最后由 我是一隻羊 于 2015-03-16 22:19 编辑
回复
11#
wz64050010
for(i=0;i++<length(a);)
复制代码
先判断i是不是小于length(a),无论判断结果如何,执行i++,然后执行循环体.
以上面的循环头为例,在循环体中,i从1遍历到length(a)
for(i=0;i<length(a);i++)
复制代码
先判断i是不是小于length(a),结果为真,执行循环体,循环体结束i++.
以上面的循环头为例,在循环体中,i从0遍历到length(a)-1
a[++i]和a[i++]的区别
a[++i]数组下标从1开始,a[i++]数组下标从0开始.
至于为什么不停输出空行,是这样的..
只输出一行的话你应该明白了吧.
前面的时候用i++,数组下标从0开始
后面用i++<length(a),输出数组从1遍历,最后差了一个.
比如原来数组只有10个元素,按你那样改完,在你认为的最后一次循环体会执行print a[10],注意这时候你就已经让a[10]存在了,它的值为空...所以length(a)的值就变了,直接+1,再进入下次循环判断循环不会结束,因为i++,length(a)也++了,于是就死循环不停输出空行.
作者:
tuyajie
时间:
2015-03-16 23:22
求解!跪求
回复
9#
ly5066113
作者:
wz64050010
时间:
2015-03-17 11:08
回复
12#
我是一隻羊
明白了,感谢
作者:
moperyblue
时间:
2016-12-07 19:55
awk '{NF=NF;printf $0 RT}' RS='\n[0-9]+:'
复制代码
作者:
cd_ly
时间:
2016-12-12 11:26
awk '/:/&&a{print a;a=""}{if(a){a=a" "$0}else{a=$0}}END{print a}' file
作者:
sunzhiguolu
时间:
2016-12-15 08:44
perl -0pe 's/\n(?!\d)/ /g' f
复制代码
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2