免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: yestreenstars
打印 上一主题 下一主题

[文本处理] 按列倒序排列 [复制链接]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
21 [报告]
发表于 2013-04-18 13:45 |只看该作者
yinyuemi 发表于 2013-04-18 12:45
回复 7# blackold

有这个功能的话,那awk就真的太强大了,编写的时候可以方便很多
可以举个例子吗?

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
22 [报告]
发表于 2013-04-18 13:53 |只看该作者
写了个不借助 asort 的版本
  1. awk -F \| '{for(i=1;i<=NF;i++){for(j=1;j<NR;j++){if($i>a[i","j])break}for(k=NR;k>j;k--)a[i","k]=a[i","(k-1)];a[i","j]=$i}m=NF;n=NR}END{for(i=1;i<=n;i++){for(j=1;j<m;j++)printf a[j","i]"|";print a[j","i]}}' file
复制代码

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
23 [报告]
发表于 2013-04-18 13:55 |只看该作者
回复 21# cjaizss


老大,我以前发过个帖子,gawk4.0 的新功能~
   
http://bbs.chinaunix.net/thread-3559813-1-1.html


论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每月发帖之星
日期:2015-09-11 19:30:52IT运维版块每周发帖之星
日期:2015-09-11 19:20:31IT运维版块每日发帖之星
日期:2015-08-26 06:20:00每日论坛发贴之星
日期:2015-08-20 06:20:00IT运维版块每日发帖之星
日期:2015-08-20 06:20:002015年辞旧岁徽章
日期:2015-03-03 16:54:15金牛座
日期:2014-05-04 16:58:09双子座
日期:2013-12-17 16:44:37辰龙
日期:2013-11-22 15:20:59狮子座
日期:2013-11-18 22:55:08射手座
日期:2013-11-12 10:54:26
24 [报告]
发表于 2013-04-18 13:55 |只看该作者
回复 5# yestreenstars


    恩,我说的是思路。要写出来就直接贴代码了。

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
25 [报告]
发表于 2013-04-18 14:05 |只看该作者
本帖最后由 yestreenstars 于 2013-04-18 14:36 编辑

回复 20# cjaizss


    太好了~ 看了你的代码的前半部分,再结合我之前自己想的半成品,我也写了一个:
  1. awk -F\| '{for(i=1;i<=NF;i++)a[i]=a[i]!=""?a[i]" "$i:$i}END{for(i=1;i<=NF;i++){split(a[i],b," ");asort(b,c);for(j=1;j<=NR;j++)d[i,j]=c[j]}for(i=NR;i>=1;i--){for(j=1;j<NF;j++)printf "%s|",d[j,i];print d[NF,i]}}'
复制代码

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
26 [报告]
发表于 2013-04-18 14:14 |只看该作者
yinyuemi 发表于 2013-04-18 13:55
回复 21# cjaizss

收到,拜读先

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
27 [报告]
发表于 2013-04-18 14:17 |只看该作者
回复 23# yinyuemi


    学习了~

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
28 [报告]
发表于 2013-04-18 14:19 |只看该作者
不用 awk 应该就没有管道的限制了吧,哈哈。
  1. [seesea@UC ~]$ file_name="file"; delimiter='|'; cmd="paste -d'$delimiter'"; line=$(head -1 $file_name); line=${line//[^$delimiter]}; for ((i = 1; i <= ${#line}+1; ++i)); do cmd="$cmd <(cut -d'$delimiter' -f$i $file_name | sort -rn)"; done; eval "$cmd";
  2. 85|85|45|78
  3. 12|52|21|75
  4. 04|44|15|32
复制代码

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
29 [报告]
发表于 2013-04-18 14:22 |只看该作者
回复 28# seesea2517


    哈哈,你好喜欢用shell,不过我的原意是不借助管道,使用awk来解决~

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
30 [报告]
发表于 2013-04-18 14:38 |只看该作者
seesea2517 发表于 2013-04-18 14:19
不用 awk 应该就没有管道的限制了吧,哈哈。

挺好,不过我一般记不住paste啊,sort啊,cut,tr什么的命令,记得awk/sed搞定,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP