免费注册 查看新帖 |

Chinaunix

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

[文本处理] 难题 ! 难题! 难题 !排版的问题。高手请来试刀 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-08-13 22:06 |只看该作者 |倒序浏览
本帖最后由 initrdimg 于 2012-08-13 22:45 编辑

如题:
a="ab ba ac cd"  #总数4
b="23 22 22 22 22 22 22 22 22 22 22 22" #总数12
c="11 12 13 14" #总数4

排版想要的结果是:
ab 23 22 22 11
ba 22 22 22 12
ac 22 22 22 13
cd 22 22 22 14


限bash shell ,有没有那么大侠、高手帮助一下,3q。

论坛徽章:
0
2 [报告]
发表于 2012-08-13 22:12 |只看该作者
自己顶!!!!!!!!!!!!!!!!!!!!!

论坛徽章:
0
3 [报告]
发表于 2012-08-13 22:20 |只看该作者
不要把我沉了

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
4 [报告]
发表于 2012-08-13 22:27 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
5 [报告]
发表于 2012-08-13 22:33 |只看该作者
回复 4# zooyo

是变量啊,哥
   

论坛徽章:
0
6 [报告]
发表于 2012-08-13 22:35 |只看该作者
我自己写了一个。但不达不到要求,请版主,其它高手帮忙看看啊


a="a b c d"
b="23 22 22 22 22 22 22 22 22 22 22 22"
c="1 1 1 1"
for i in $c
{
k=$((k+1))
}

echo  $a $c $b|awk -v var=$k 'BEGIN{
        OFS="\n"
                                   }
{
        for(i=1;i<=NF;i++)
        {
        if(i<=var)
        {
                print $i " " $(i+var)
        }
        if (i>(var)*2)
        {
                print $i " " $(i+1) " " $(i+2)
                i=i+2
        }
}
}'


输出结果:
[root@localhost ~]# ./test
a 1
b 1
c 1
d 1
23 22 22
22 22 22
22 22 22
22 22 22

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
7 [报告]
发表于 2012-08-13 22:37 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
8 [报告]
发表于 2012-08-13 23:10 |只看该作者
本帖最后由 hbmhalley 于 2012-08-13 23:12 编辑
  1. awk '{while (i<NF) printf($(i*4%NF+i/5+1)"%c",++i%5?" ":"\n")}' <<< "$a $b $c"
复制代码

论坛徽章:
1
辰龙
日期:2014-05-22 11:38:58
9 [报告]
发表于 2012-08-14 00:19 |只看该作者
  1. #! /bin/bash
  2. #

  3. n=0
  4. while read line
  5. do
  6.         eval arr[$n]=arr$n
  7.         eval arr$n=$(echo $line | sed 's/^.*"\([^"]*\)".*$/(\1)/')
  8.         eval fields=\${#arr$n[@]}
  9.         if [[ $n -eq 0 ]]
  10.         then
  11.                 min=$fields
  12.         elif [[ $min -gt $fields ]]
  13.         then
  14.                 min=fields
  15.         fi
  16.         ((n++))
  17. done <urfile

  18. for ((i=0; i<$min; ++i))
  19. do
  20.         for ((j=0; j<${#arr[@]}; ++j))
  21.         do
  22.                 eval num=\${#${arr[$j]}[@]}
  23.                 ((num/=min))
  24.                 eval echo -n "\${${arr[$j]}[@]:$i:$num}\ "
  25.         done
  26.         echo
  27. done
复制代码

论坛徽章:
5
未羊
日期:2014-08-04 16:15:21天秤座
日期:2014-08-13 13:52:372015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:112015亚冠之浦和红钻
日期:2015-06-29 15:30:48
10 [报告]
发表于 2012-08-14 00:41 |只看该作者
  1. [root@cd ~]# echo $a|xargs -n1 > filea
  2. [root@cd ~]# echo $b|xargs -n3 > fileb
  3. [root@cd ~]# echo $c|xargs -n1 > filec
  4. [root@cd ~]# paste -d " " file[abc]
  5. ab 23 22 22 11
  6. ba 22 22 22 12
  7. ac 22 22 22 13
  8. cd 22 22 22 14
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP