Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何按字母顺序排序,但要考虑长度(首先是较短的行)_Linux_Sorting_Command - Fatal编程技术网

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;}
  • 在每行中插入带有剪切分隔符(\t)的每行长度
  • 按数字排序(-n)
  • 删除无用的字符串

  • 在我的评论中,我提出了一种方法,这种方法会变得丑陋,比如:

    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