最短线的长度?

时间:2012-09-26 10:58:07

标签: linux shell

在使用wc -L的Linux命令中,可以获得文本文件最长行的长度。

如何找到文本文件的最短行的长度?

4 个答案:

答案 0 :(得分:12)

试试这个:

awk '{print length}' <your_file> | sort -n | head -n1

此命令获取所有文件的长度,对它们进行排序(正确地,作为数字),并且,最小的数字,将最小的数字打印到控制台。

答案 1 :(得分:10)

Pure awk解决方案:

awk '(NR==1||length<shortest){shortest=length} END {print shortest}' file

答案 2 :(得分:0)

我将awk命令转换为函数(对于bash):

function shortest() { awk '(NR==1||length<shortest){shortest=length} END {print shortest}' $1 ;} ## report the length of the shortest line in a file

将此添加到我的.bashrc(然后是“source .bashrc”)

然后运行它:最短的“yourFileNameHere”

[~]$ shortest .history
2

可以将其分配给变量(注意需要反对):

[~]$ var1=`shortest .history`
[~]$ echo $var1
2

对于csh:

alias shortest "awk '(NR==1||length<shortest){shortest=length} END {print shortest}' \!:1 "

答案 3 :(得分:0)

上述两个awk解决方案都没有处理&#39; \ r&#39; wc -L的方式。 对于单行输入文件,它们不应生成大于wc -L报告的最大行长度的值。

这是一个基于sed的新解决方案(我在保持正确的同时无法缩短):

echo $((`sed 'y/\r/\n/' file|sed 's/./#/g'|sort|head -1|wc --bytes`-1))

以下是一些示例,显示了&#39; \ r&#39;声明并展示sed解决方案:

$ echo -ne "\rABC\r\n" > file
$ wc -L file
3 file
$ awk '{print length}' file|sort -n|head -n1
5
$ awk '(NR==1||length<shortest){shortest=length} END {print shortest}' file
5
$ echo $((`sed 'y/\r/\n/' file|sed 's/./#/g'|sort|head -1|wc --bytes`-1))
0
$ 
$ echo -ne "\r\r\n" > file
$ wc -L file
0 file
$ echo $((`sed 'y/\r/\n/' file|sed 's/./#/g'|sort|head -1|wc --bytes`-1))
0
$ 
$ echo -ne "ABC\nD\nEF\n" > file
$ echo $((`sed 'y/\r/\n/' file|sed 's/./#/g'|sort|head -1|wc --bytes`-1))
1
$