我如何将文件中所有行按照长度从长到短重新排列?例如:
elephant
zoo
penguin
将会被更改为
elephant
penguin
zoo
我如何将文件中所有行按照长度从长到短重新排列?例如:
elephant
zoo
penguin
将会被更改为
elephant
penguin
zoo
将行长度作为第一个字段添加到每一行,排序后移除行长度:
awk '{ print length($0) " " $0; }' $file | sort -r -n | cut -d ' ' -f 2-
$ awk '{print length"\t"$0}' File | sort -rn | cut -f2-
,基本上是相同的东西,只是默认情况下 cut 操作选项卡,所以忽略它 :-) - Fredrik Pihl$ awk '{print length"\t"$0}' tlds-alpha-by-domain.txt
输出"$0}' tlds-alpha-by-domain.txt2 AC
等等...不使用制表符的较长版本可以生成更安全的终端/命令输出。至少在运行于Mac OS X 10.7.5上的bash版本3.2时是这样的。 - Pro Backupcat
的情况下将文件名放在前面,像这样:< input_file command1 | command2 | commmand3 > output_file
。 - Keith Thompsonbuild.gradle
文件,方法如下:find $PWD -name "build.gradle" | awk '{print length($0), $0 | "sort -n"}' | head -1 | cut -d ' ' -f 2-
- Marsloperl -ne '@a = <>; print sort { length $b <=> length $a } @a' file
需要时使用reverse
和push
我想知道在那个550MB的文件上需要多长时间
Perl版本,向@thiton致敬:
perl -ne 'print length($_)." $_"' 文件 | sort -r -n | cut -d ' ' -f 2-
$_
是当前行,类似于awk的$0
在一个有600万行的550MB .txt文件上执行perl-5.24,即英国国家语料库,仅花费了24秒
@thiton的awk(3.1.7)执行时间为26秒
向相关帖子的@William Pursell致敬:
perl -ne 'push @a, $_; END{ print reverse sort { length $a <=> length $b } @a }' 文件
perl-5.24执行时间为12.0秒
{
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--]
}
pip search json |awk '{print length($1)"\t"$1}' |sort -rn |cut -d' ' -f2-
。显然,“pip search json”只是为了产生输出而不是文件名。 - ILMostro_7