如何重新排列文件中从最长到最短的所有行?例如:
elephant
zoo
penguin
将更改为
elephant
penguin
zoo
答案 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
让我们在需要时保留reverse
和push
我想知道这个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--]
}
答案 3 :(得分:1)
Perl版本,给@thiton提示:
perl -ne 'print length($_)." $_"' file | sort -r -n | cut -d ' ' -f 2-
$_
是当前行,类似于awk的$0
请给@William Pursell写一篇相关文章:
perl -ne 'push @a, $_; END{ print reverse sort { length $a <=> length $b } @a }' file
perl-5.24执行需要12.0秒