免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 12831 | 回复: 12
打印 上一主题 下一主题

用awk合并行  关闭 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2003-06-05 14:44 |只看该作者

用awk合并行

四行合一行

  1. cat filename
  2. 111111111
  3. 222222222
  4. 333333333
  5. 444444444
  6. 555555555
  7. 666666666
  8. 777777777
  9. 888888888
  10. 999999999

  11. awk '{if (NR%4==0){print $0} else {printf"%s ",$0}}' filename
  12. 111111111 222222222 333333333 444444444
  13. 555555555 666666666 777777777 888888888
  14. 999999999

复制代码

论坛徽章:
0
2 [报告]
发表于 2003-06-05 15:31 |只看该作者

用awk合并行

muzx: 致敬!!! 高手啊!!! 万分感谢!!!

论坛徽章:
0
3 [报告]
发表于 2003-06-05 15:51 |只看该作者

用awk合并行

[quote]原帖由 "muzx"][/quote 发表:
     
哈哈,真是很好!

论坛徽章:
0
4 [报告]
发表于 2003-06-05 21:02 |只看该作者

用awk合并行

学习学习 很好

论坛徽章:
0
5 [报告]
发表于 2003-10-04 11:39 |只看该作者

用awk合并行

我再bash中试了,将两个$2改成$1才正常输出。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2003-10-04 11:57 |只看该作者

用awk合并行

要通用可以这样作:
  1. linecount=3
  2. awk -v n=${linecount} '{if (NR%n==0){print $0} else {printf"%s ",$0}}' filename
  3. 111111111 222222222 333333333
  4. 444444444 555555555 666666666
  5. 777777777 888888888 999999999

  6. linecount=2
  7. awk -v n=${linecount} '{if (NR%n==0){print $0} else {printf"%s ",$0}}' filename
  8. 111111111 222222222
  9. 333333333 444444444
  10. 555555555 666666666
  11. 777777777 888888888
  12. 999999999
复制代码

论坛徽章:
0
7 [报告]
发表于 2003-10-04 12:03 |只看该作者

用awk合并行

不通用的

  1. $n=1;m=4
  2. $while ((n<=$(cat filename|wc -l)));do
  3. > cat filename|sed -n ${n},${m}p|tr '\n' ' ';echo "\n"
  4. > ((n+=4));((m+=4));done|sed '/^$/d'
  5. 111111111  222222222  333333333  444444444
  6. 555555555  666666666  777777777  888888888
  7. 999999999
复制代码

论坛徽章:
0
8 [报告]
发表于 2003-10-04 13:14 |只看该作者

用awk合并行

if(NR%4)==0)ORS=" ";else ORS="\n";print $0;
简单么?呵呵

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
9 [报告]
发表于 2003-10-05 16:17 |只看该作者

用awk合并行

原帖由 "fzbook" 发表:
if(NR%4)==0)ORS=" ";else ORS="\n";print $0;
简单么?呵呵

不错!是很简单,但有一点小毛病-->逻辑反了,括弧不配对!
改正其中的错误后执行结果如下:
  1. 111111111
  2. 222222222
  3. 333333333
  4. 444444444 555555555
  5. 666666666
  6. 777777777
  7. 888888888 999999999
复制代码

显然不是我们想要的结果!
改正逻辑错误后:
  1. if(NR%4!=0)ORS=" ";else ORS="\n";print
  2. or
  3. if(NR%4==0)ORS="\n";else ORS=" ";print
复制代码

执行结果:
  1. awk '{if(NR%4!=0)ORS=" ";else ORS="\n";print}' a
  2. 111111111 222222222 333333333 444444444
  3. 555555555 666666666 777777777 888888888
  4. 99999999
复制代码

这才是我们所要的。

论坛徽章:
0
10 [报告]
发表于 2004-08-16 14:49 |只看该作者

用awk合并行


我有一问题,数据原状与你的类似,是两列的。现要合并成八列。我用你的方法试过,输出不对。请教解决办法。多谢。
111     111
222     222
333     333
444     444
555     555
666     666
777     777
888     888
999     999
101     101
要求合并后排列格式为如下(即八列;不足八列的不用管它):
111    111    222    333    444    555    666    777    888
999    999    101    101
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP