找出文件中最长的行

如何找出文件中最长的行?我写了下面的awk脚本,打印出最长行的行号,内容以及行的长度:

#!/bin/awk -f
BEGIN {
    max_len = 0
    max_line = ""
    max_nu = 0
}
{
    cur_len = length
    if(cur_len>max_len) {
        max_len = cur_len
        max_line = $0
        max_nu = NR
    }
}
END{
    print max_nu, max_line, max_len
}

在网上看到,还有人这么写

awk '{print length,NR,$0}' a.txt | sort -nr | head -1  

第二种写法的好处是更简洁,而且可以根据head的参数来调整显示的行数,但是sort处多出排序的过程,处理起来更费时,应用时看情况而定。

另外,wc也可以显示最长行的长度,但是没法显示内容,可以结合其他工具来用

wc -L a.txt

如果在vim里面编辑文件,通常需要找出超过某长度的行,较好的方法是:在vim里面高亮长行。

# 高亮每行超过80个字符的部分, :help /\%
# v表示virtual column
/\%>80v

column 和 virtual column 的区别见这里的讨论。