Chinaunix

标题: 如何对列表按字符长度排序 [打印本页]

作者: shuser    时间: 2005-08-16 16:45
标题: 如何对列表按字符长度排序
aa
bbb
ccc
d
eeeeeee
ffffff
gg

以上序列,如何根据字符串长度排列出如下结果:

eeeeeee
ffffff
bbb
ccc
aa
gg
d
作者: waker    时间: 2005-08-16 16:55
标题: 如何对列表按字符长度排序
awk '{print  length($0),$0}' file |sort -nr|sed '/^[^ ]* /s///'
作者: dahai01    时间: 2005-08-16 17:30
标题: 如何对列表按字符长度排序
感觉waker 象神一样.

sed '/^[^ ]* /s///'  解释下.

谢谢.
作者: waker    时间: 2005-08-16 17:41
标题: 如何对列表按字符长度排序
/^[^ ]* /匹配n个不是空格的字符然后是一个空格,也就是第一列
/^[^ ]* /s// 替代匹配的内容
//新内容是null

有时间看看那篇 sed1line
作者: 寂寞烈火    时间: 2005-08-16 17:59
标题: 如何对列表按字符长度排序

  1. while read line;do
  2.         echo -n "$line ";expr length $line
  3. done<filename|sort -k2nr|cut -f1 -d' '
复制代码

作者: wayy2008    时间: 2005-08-17 13:37
提示: 作者被禁止或删除 内容自动屏蔽
作者: waker    时间: 2005-08-17 14:23
标题: 如何对列表按字符长度排序
这样更好懂,但如果有些行是 eee  ee会出现什么结果呢?
用awk要打印 $2-$NF或是$1=""; sub(/^ */,""或是sub(/^[^ ]* /,""
那不如用sed来的干脆一点
作者: wayy2008    时间: 2005-08-17 15:00
提示: 作者被禁止或删除 内容自动屏蔽
作者: 新手上路samson    时间: 2005-08-17 15:19
标题: 如何对列表按字符长度排序

作者: joyaid    时间: 2005-08-17 17:40
标题: 如何对列表按字符长度排序
up
作者: angleeye    时间: 2005-08-18 12:54
标题: 如何对列表按字符长度排序
用awk的实现:

  1. BEGIN{a=0}
  2. {
  3.         a+=1;
  4.         s[a]=$0;
  5.         sl[2*a]=length($0);
  6.         sl[2*a+1]=a;
  7. }
  8. END{
  9. #        for (i=1;i<=a;i++)
  10. #                print s[i];

  11.         print "total count is "a;
  12.         for (i=1;i<=a-1;i++)
  13.         {
  14.                 for(j=i+1;j<=a;j++)
  15.                 {
  16.                         if(sl[2*i]<sl[2*j])
  17.                         {
  18.                                 temp=sl[2*i];
  19.                                 sl[2*i]=sl[2*j];
  20.                                 sl[2*j]=temp;
  21.                                 temp=sl[2*i+1];
  22.                                 sl[2*i+1]=sl[2*j+1];
  23.                                 sl[2*j+1]=temp;
  24.                         }
  25.                 }
  26.         }
  27. #        for (i=1;i<=a;i++)
  28. #        {
  29. #                print "i="i;
  30. #                print sl[2*i+1];
  31. #        }       
  32.         for (i=1;i<=a;i++)
  33.                 print s[sl[2*i+1]];
  34. }
复制代码

作者: waker    时间: 2005-08-18 13:16
标题: 如何对列表按字符长度排序
  1. awk '{b=length($0);a[b]=a[b]"\n"$0;if(b>max)max=b;}
  2. END { for (i=max;i>=0;i--) {if(a[i]){ sub(/^\n/,"",a[i]); print  a[i]}}}' file
复制代码

作者: 700724    时间: 2005-08-18 13:54
标题: 如何对列表按字符长度排序
waker的代码简直是出神入画,能讲讲你在很多awk代码中都用到END是什么意思,具体作用是什么?谢谢!
作者: angleeye    时间: 2005-08-18 13:59
标题: 如何对列表按字符长度排序
原帖由 "waker"]awk '{b=length($0);a=a[b 发表:
"\n"$0;if(b>max)max=b;}
END { for (i=max;i>=0;i--) {if(a){ sub(/^\n/,"",a); print  a}}}' file



damm!
so nice !
pfpf
学习中.....
作者: angleeye    时间: 2005-08-18 14:02
标题: 如何对列表按字符长度排序
[quote]原帖由 "700724"]waker的代码简直是出神入画,能讲讲你在很多awk代码中都用到END是什么意思,具体作用是什么?谢谢![/quote 发表:

BEGIN,END,是一些特殊的匹配,
分别在开始和结束的时候运行,
其他的是在每行上面应运




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2