awk- 统计文件中最长行的长度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了awk- 统计文件中最长行的长度相关的知识,希望对你有一定的参考价值。

参考技术A 1.cat result.txt |awk 'print length($0)'|sort -nr|head -1

2.cat result.txt | awk 'BEGINmax=0if (max < length($0)) max = length($0) END print max'

linux shell 如何使用while read line去获取一个文件里指定符号前最长的长度

假如文件有5行 指定符号为“;”
12;
12345;
123456;
123;
123456;为最长的一行 记录长度6

如何用while read line 去读取这个文件并且完成这个步骤?

参考技术A wc -L file

读取最长的行的长度,减一就是6

追问

寻找的并不是最长的行的长度 而是指定符号前最长行的长度

12;111
12345; 1111111
123456; 1
123;1111

假如例子是这样的 那;前最长的长度依然是6 和;后面的东西无关
如果用wc 没法这么判断吧

追答

如果是你说的,他这样有可能不行
如果一行有多个,XXXX;XXXXXX;XEWD;
他只能比较和记录第一个的长度,后面的忽略了
你说的情况,可以先用sed把 ; 号换成 ; 加上换行符 \n 后
再wc -L就好了

参考技术B #! /usr/bin/bash

filename="test.txt"
len=0
max=0
maxline=""
while read line
do
l=`echo $line | cut -d";" -f1`
ll=`expr length "$l"`
echo "$l $ll"
if [[ $ll -gt $max ]]
then
max="$ll"
maxline="$l"
fi

done < $filename

echo "max length: $max"
echo "max line: $maxline"追问

十分感谢 有一个问题 我将指令输入后弹出了提示
syntax error near unexpected token `then'

是then那里出了什么问题吗

追答

echo "$l $ll" 这句有输出吗?

你可以把第一行改成 #! /usr/bin/bash -x 再试试,看看是具体哪里有错

我这里是测试没问题的

追问

总之谢谢了 我自己慢慢看一下吧

本回答被提问者采纳

以上是关于awk- 统计文件中最长行的长度的主要内容,如果未能解决你的问题,请参考以下文章

Linux wc命令详解

linux shell 如何使用while read line去获取一个文件里指定符号前最长的长度

Linux Shell 找出一个文件里特定符号之前最长的一行 并记录长度

从大文件中计算字符长度

Linux--shell中获取字符串长度的常用方法

练习1-16 修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多地打印文本。