我想把数据从最短的行排序到最长的行,数据包含
空格、字符、数字、“,”
,我使用sort -n
,但它没有解决工作。非常感谢您的帮助
这里的数据
0086年
0086年-
0086年---
0086----
0086-1358600966
0086-18868661318
00860号
00860-13081022659
00860-131111111
00860-13176880028
00860-13179488252
00860-18951041771
00861号
008629-83023520
0086000个
0086010-61281306
我想要的结果是
0086年
0086年-
00860号
00861号
0086000个
0086年---
0086----
0086-1358600966
00860-131111111
008629-83023520
0086-18868661318
0086010-61281306
00860-13081022659
00860-13176880028
00860-13179488252
00860-18951041771
我不在乎什么字符,只是从短到长。两行用同样的长可以交换,这不是问题。多谢
最佳答案
Perl一行程序
perl -0777 -ne 'print join("\n", map {$_->[1]} sort {$a->[0] <=> $b->[0]} map {[length, $_]} split /\n/), "\n"' file
按需解释。
使用gnu awk,非常简单:
gawk '
{len[$0] = length($0)}
END {
PROCINFO["sorted_in"] = "@val_num_asc"
for (line in len) print line
}
' file
见https://www.gnu.org/software/gawk/manual/html_node/Controlling-Scanning.html#Controlling-Scanning