Linux 如何按字母顺序排序,但要考虑长度(首先是较短的行)
我想按字母顺序对文件中的行进行排序,但要考虑行的长度(先短一点) 例如:Linux 如何按字母顺序排序,但要考虑长度(首先是较短的行),linux,sorting,command,Linux,Sorting,Command,我想按字母顺序对文件中的行进行排序,但要考虑行的长度(先短一点) 例如: a b aa bbb zzzz ccccc 使用sort命令,我得到: a aa b bbb ccccc zzzz 如何获得第一个输出?Javascript(arr是数组): arr.sort().sort((a,b)=>(a.length>b.length)) 说明: 第一部分:arr.sort()将返回按字母顺序排序的数组 第二个pard将根据元素的长度再次排序 (a,b)=>(a.length>b.length)
a
b
aa
bbb
zzzz
ccccc
使用sort命令,我得到:
a
aa
b
bbb
ccccc
zzzz
如何获得第一个输出?Javascript(arr是数组):
arr.sort().sort((a,b)=>(a.length>b.length))
说明:
第一部分:arr.sort()将返回按字母顺序排序的数组
第二个pard将根据元素的长度再次排序
(a,b)=>(a.length>b.length)也可以写成:
function(a, b){return a.length > b.length;}
在我的评论中,我提出了一种方法,这种方法会变得丑陋,比如:
awk 'BEGIN { maxlen=0 }
{len=length($0); a[len,NR]=$0; if (len > maxlen) maxlen=len }
END {
for (row=1; row <= maxlen; ++row) {
for (i=1;i<=NR;i++) {
if (a[row,i]) {
ax[i]=a[row,i];
}
}
asort(ax)
for (s in ax)
print ax[s]
delete ax
}
}' input
awk'开始{maxlen=0}
{len=length($0);a[len,NR]=0;if(len>maxlen)maxlen=len}
结束{
对于(行=1;行第一部分(按长度排序):awk'BEGIN{maxlen=0}{len=length($0);a[len,NR]=$0;if(len>maxlen)maxlen=len}END{for(row=1;row请提供一些解释和答案。这是什么语言?如果用户不知道如何执行它,就没有多大用处,是吗?它是JavaScript,可以在浏览器控制台上进行测试。@g.sui问题标记为“linux”,这意味着作者希望通过shell脚本执行一些可执行的内容。而可以在shell中执行JS(例如,通过节点
)您需要额外的代码来读取和写入数据。很好,但是当输入文件有空格时将失败。您可以在读取-r i;do…done
时使用修复此问题。
awk 'BEGIN { maxlen=0 }
{len=length($0); a[len,NR]=$0; if (len > maxlen) maxlen=len }
END {
for (row=1; row <= maxlen; ++row) {
for (i=1;i<=NR;i++) {
if (a[row,i]) {
ax[i]=a[row,i];
}
}
asort(ax)
for (s in ax)
print ax[s]
delete ax
}
}' input
awk '
{ len=sprintf ("%20s",length($0)); gsub(/ /,0,str); a[NR]=len "_" $0; }
END {
asort(a)
for (s=1;s<=NR;s++)
print substr(a[s],22)
}' input