排序从最长到最短

时间:2011-11-28 13:41:40

标签: bash

如何重新排列文件中从最长到最短的所有行?例如:

elephant
zoo
penguin

将更改为

elephant
penguin
zoo

4 个答案:

答案 0 :(得分:42)

将行长度添加为行的第一个字段,排序并删除行长度:

awk '{ print length($0) " " $0; }' $file | sort -r -n | cut -d ' ' -f 2-

答案 1 :(得分:3)

TIM(我对TIMTOWTDI的简洁版......嗯,但现在已经很久了:(

perl -ne '@a = <>; print sort { length $b <=> length $a } @a' file

让我们在需要时保留reversepush

我想知道这个550MB文件需要多长时间

答案 2 :(得分:1)

使用POSIX Awk:

{
  c = length
  m[c] = m[c] ? m[c] RS $0 : $0
} END {
  for (c in m) q[++x] = m[c]
  while (x) print q[x--]
}

Example

答案 3 :(得分:1)

Perl版本,给@thiton提示:

perl -ne 'print length($_)." $_"' file | sort -r -n | cut -d ' ' -f 2-

$_是当前行,类似于awk的$0

在具有600万行(英国国家语料库)的550MB .txt文件上执行perl-5.24需要24秒

@titon的awk(3.1.7)执行需要26秒

请给@William Pursell写一篇相关文章:

perl -ne 'push @a, $_; END{ print reverse sort { length $a <=> length $b } @a }' file

perl-5.24执行需要12.0秒