Shell 按照字符串长度进行排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell 按照字符串长度进行排序相关的知识,希望对你有一定的参考价值。

一个文本中有若干行,每一行都有且只有一个字符串,要求按照这个字符串的长度对文本中的每一行进行排序,使得长度最长的的行放第一行,第二长次之,以此类推。。。

假设你的文本叫 file.txt
awk 'print $0" "length($0)' file.txt | sort -nr -k2 | awk 'print $1' > tmp.txt

排序后的文本为tmp.txt

举例:
$ cat ./file.txt
test
mytestit
hello
girl
boy
let'sdoit&justdoit.

$ awk 'print $0" "length($0)' file.txt | sort -nr -k2 | awk 'print $1' > tmp.txt

$ cat tmp.txt
let'sdoit&justdoit.
mytestit
hello
test
girl
boy
参考技术A #include<string.h>
void convert(char *a,char *b,char *c);
void main()

int i,j;
char a[3][10];
for(i=0;i<3;i++)

printf("input the %d string:\n",i+1);
scanf("%s",a[i]);//指针的用法注意点

convert(a[0],a[1],a[2]);
printf("after change\n");
for(j=0;j<3;j++)

printf("%s ",a[j]);//注意i,j啊,这个错误太隐蔽了



void convert(char *a,char *b,char *c)

char temp[10];
if(strcmp(a,b)>0)

strcpy(temp,a);
strcpy(a,b);
strcpy(b,temp);


if(strcmp(a,c)>0)

strcpy(temp,a);
strcpy(a,c);
strcpy(c,temp);


if(strcmp(b,c)>0)

strcpy(temp,b);
strcpy(b,c);
strcpy(c,temp);


参考技术B 假设操作文档为d:\1.txt
输出文件为d:\temp.txt

Dim a()
Private Sub Command1_Click()
Open "d:\1.txt" For Input As #1
Do Until EOF(1)
z = z + 1
ReDim Preserve a(z)
Line Input #1, w
a(z) = Len(w) & "*" & w
Loop
Close
For i = 1 To z - 1
For j = i + 1 To z
t = Split(a(i), "*")
q = Split(a(j), "*")
If Val(t(0)) < Val(q(0)) Then
temp = a(i)
a(i) = a(j)
a(j) = temp
End If
Next j
Next i
Open "d:\temp.txt" For Output As #2
For i = 1 To z
y = Split(a(i), "*")
Print #2, y(1)
Next i
Close
End Sub
参考技术C [root@localhost ~]# awk ' print length, $0' a | sort -n | sed 's/.* //'
a
d
ds
ese
sasd
abcds
dfsafdsa
[root@localhost ~]# cat a
abcds
ds
sasd
dfsafdsa
d
a
ese本回答被提问者采纳

Shell编程字符处理命令sort和wc

系列文章

【Shell编程】Shell中的正则表达式
【Shell编程】字符截取命令cut、printf命令
【Shell编程】字符截取命令awk、sed命令


目录

sort命令

语法sort [选项] 文件名

参数说明
-f忽略大小写
-n以数值型进行排序,默认使用字符串排序
-r反向排序
-t指定分隔符,默认分隔符是制表符
-k n[,m]按照指定的字段范围排序,从第n字段开始,m字段结束(默认到行尾)

实例

按照首字母做升序

命令: sort /etc/passwd

按照首字母做倒序

命令: sort -r /etc/passwd

把数值型数据按照字符型来对待进行排序

命令: sort -t ":" -k 3,3 /etc/passwd

把数值型数据按照数值来进行排序

命令: sort -n -t ":" -k 3,3 /etc/passwd 注: -n需要写在-t前面

wc命令

语法:wc [选项] 文件名

参数说明
-l只统计行数
-w只统计单词数
-m只统计字符数

实例

计算文件中的行数

命令:wc -l /etc/passwd

以上是关于Shell 按照字符串长度进行排序的主要内容,如果未能解决你的问题,请参考以下文章

数组中字符串按照长度大小排序

按照字符串长度排序

字符排序

2017.11.17

如何在mongodb中查找字符串(短语)的长度并根据长度对其进行排序?

按长度对字符串的 ArrayList 进行排序