免费注册 查看新帖 |

Chinaunix

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

请问:awk: 对record排序 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2004-08-30 19:44 |只看该作者

请问:awk: 对record排序

原帖由 "shaoping0330" 发表:
^_^ bjgirl好聪明!
多行按照你的方法的确能处理。

不过,我其实是想问begincwcw:
……
for(i =1; i < 2; i++){
getline; print }
……
他的程序怎样能识别多行。

谢谢bjgirl!

我对awk编程一窍不通 只有用零碎的命令来弥补

论坛徽章:
0
22 [报告]
发表于 2004-08-30 22:45 |只看该作者

请问:awk: 对record排序

FO 下可以有任意多行:

sed -e :a -e '$!N;s/\n\([^F]\)/aaa\1/;ta' -e 'P;D'  file | sort -k2nr |sed 's/aaa/\n/g'

论坛徽章:
0
23 [报告]
发表于 2004-08-31 09:46 |只看该作者

请问:awk: 对record排序

原帖由 "bjgirl" 发表:

我对awk编程一窍不通 只有用零碎的命令来弥补


bjgirl,我对awk编程只通了一窍,还有六窍啊……

论坛徽章:
0
24 [报告]
发表于 2004-08-31 12:33 |只看该作者

请问:awk: 对record排序

nawk '
{if($0~/^FO/)
printf("\n%s ", $0)
else
printf("%s ", $0)}
END{ print "\n" }' filename|sort -r|nawk '{for(i = 1; i <= NF; i++) print $i }'

论坛徽章:
0
25 [报告]
发表于 2004-08-31 14:13 |只看该作者

请问:awk: 对record排序

原帖由 "begincwcw" 发表:
nawk '
{if($0~/^FO/)
printf("\n%s ", $0)
else
printf("%s ", $0)}
END{ print "\n" }' filename|sort -r|nawk '{for(i = 1; i <= NF; i++) print $i }'


明白你的意思,先弄到一行再sort再print
但略有问题,若原先的一行中包含空格,就会被当成两行打出
例如
8888888 333333333
38383838383838383
变成
8888888
333333333
38383838383838383

论坛徽章:
0
26 [报告]
发表于 2004-08-31 14:28 |只看该作者

请问:awk: 对record排序

大家想出这么多方法,的确都很厉害。
begincwcw,虽说有点钻牛角尖,不过我还是提出来:
1、for(i = 1; i <= NF; i++) print $i  这行语句可能会把本来处在一行里,但中间有空格的拆成多行(包括bjgirl的语句);
2、sort -r 在遇到不同位数字时,默认只按第一位排序,bjgirl的sort命令就比较安全了;
3、而且你对第一行(即:FO: number)处理的不好,因为“:”后有空格;
4、还有一个问题,就是“FO: number”后若没有空格,后面的行就会紧贴这number打印(你在vi的命令模式用“x”删除number后面的空格试试)。

所以,有待改进!

论坛徽章:
0
27 [报告]
发表于 2004-08-31 15:12 |只看该作者

请问:awk: 对record排序

nawk '
{if($0~/^FO/)
printf("\n%s ", $0)
else
printf(";%s ", $0)}
END{ print "\n" }' filename|sort -r|nawk -F";"'{for(i = 1; i <= NF; i++) print $i }'

如果是第三个字段排序,可用sort +3 -r 来处理。

论坛徽章:
0
28 [报告]
发表于 2004-08-31 15:20 |只看该作者

请问:awk: 对record排序

nawk '
{if($0~/^FO/)
printf("\n%s ", $0)
else
printf(";%s ", $0)}
END{ print "\n" }' filename|sort +0 -r|nawk -F";"'{for(i = 1; i <= NF; i++) print $i }'

如果是第二个字段排序,可用sort +1 -r 来处理。你们所说的bug已改正,希望大家再指出我的bug,谢谢。

论坛徽章:
0
29 [报告]
发表于 2004-08-31 20:53 |只看该作者

请问:awk: 对record排序

哥们  你为什么不用perl写呢    读到hash里去   随便排序  
用cpp写也行   读入map容器  挨个遍历....

论坛徽章:
0
30 [报告]
发表于 2004-08-31 22:57 |只看该作者

请问:awk: 对record排序

xixi,都聊到perl啦
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP