在使用wc -L
的Linux命令中,可以获得文本文件最长行的长度。
如何找到文本文件的最短行的长度?
答案 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
$