代码之家  ›  专栏  ›  技术社区  ›  Andrew Prock

文件中最长的行

  •  173
  • Andrew Prock  · 技术社区  · 15 年前

    我正在寻找一种简单的方法来查找文件中最长的行的长度。理想情况下,它将是一个简单的bash shell命令,而不是一个脚本。

    13 回复  |  直到 6 年前
        1
  •  234
  •   Daniel    15 年前

    使用wc(gnu coreutils)7.4:

    wc -L filename
    

    给予:

    101 filename
    
        2
  •  86
  •   RavinderSingh13 Nikita Bakshi    6 年前
    awk '{print length, $0}' Input_file |sort -nr|head -1
    

    供参考: Finding the longest line in a file

        3
  •  60
  •   Ramon    15 年前
    awk '{ if (length($0) > max) {max = length($0); maxline = $0} } END { print maxline }'  YOURFILE 
    
        4
  •  22
  •   Jens    11 年前

    为了娱乐和教育目的, 纯POSIX外壳解决方案 不使用cat,也不使用外部命令。将文件名作为第一个参数:

    #!/bin/sh
    
    MAX=0 IFS=
    while read -r line; do
      if [ ${#line} -gt $MAX ]; then MAX=${#line}; fi
    done < "$1"
    printf "$MAX\n"
    
        5
  •  12
  •   Cairnarvon    12 年前
    wc -L < filename
    

    给予

    101
    
        6
  •  11
  •   Chris Koknat    9 年前
    perl -ne 'print length()."  line $.  $_"' myfile | sort -nr | head -n 1
    

    打印最长行的长度、行号和内容

    perl -ne 'print length()."  line $.  $_"' myfile | sort -n
    

    打印所有行的排序列表,包括行号和长度

    . 是串联运算符-它在length()之后使用
    $. 是当前的行号
    $_ 是当前行

        7
  •  4
  •   John Kearney    13 年前

    上述例子中重要的忽略点。

    以下两个示例统计展开的选项卡

      wc -L  <"${SourceFile}" 
    # or
      expand --tabs=1 "${SourceFile}" | awk '{ if (length($0) > max) {max = length($0)} } END { print max }'
    

    以下两个非扩展选项卡计数。

      expand --tabs=1 "${SourceFile}" | wc -L 
    # or
      awk '{ if (length($0) > max) {max = length($0)} } END { print max }' "${SourceFile}"
    

    所以

                  Expanded    nonexpanded
    $'nn\tnn'       10            5
    
        8
  •  4
  •   Paul Rooney    8 年前

    看所有答案都没有给出最长行的行号。以下命令可以给出行号和大致长度:

    $ cat -n test.txt | awk '{print "longest_line_number: " $1 " length_with_line_number: " length}' | sort -k4 -nr | head -3
    longest_line_number: 3 length_with_line_number: 13
    longest_line_number: 4 length_with_line_number: 12
    longest_line_number: 2 length_with_line_number: 11
    
        9
  •  3
  •   rsp    15 年前

    在Perl中:

    perl -ne 'print ($l = $_) if (length > length($l));' filename | tail -1
    

    这只打印线条,而不是它的长度。

        10
  •  3
  •   Nadir SOUALEM    15 年前

    这是安华社的参考资料

    cat filename | awk '{print length, $0}'|sort -nr|head -1
    

    http://wtanaka.com/node/7719

        11
  •  2
  •   Eddie Groves    15 年前

    为了好玩,以下是PowerShell版本:

    cat filename.txt | sort length | select -last 1
    

    为了得到长度:

    (cat filename.txt | sort length | select -last 1).Length
    
        12
  •  2
  •   Jon    8 年前

    我在一个Unix环境中,使用的gzip文件大小只有几Gbs。我使用记录长度为2052的2GB gzip文件测试了以下命令。

    1. zcat <gzipped file> | wc -L

    1. zcat <gzipped file> | awk '{print length}' | sort -u

    时代在变化

    1. 117秒

    2. 109秒

    这是我跑了大约10次后的脚本。

    START=$(date +%s) ## time of start
    
    zcat $1 |  wc -L
    
    END=$(date +%s) ## time of end
    DIFF=$(( $END - $START ))
    echo "It took $DIFF seconds"
    
    START=$(date +%s) ## time of start
    
    zcat $1 |  awk '{print length}' | sort -u
    
    END=$(date +%s) ## time of end
    DIFF=$(( $END - $START ))
    echo "It took $DIFF seconds"
    
        13
  •  1
  •   martin clayton egrunin    15 年前

    主题变化。

    这个会显示 全部的 行的长度为文件中找到的最长行的长度,保留它们在源文件中的显示顺序。

    FILE=myfile grep `tr -c "\n" "." < $FILE | sort | tail -1` $FILE
    

    所以我的档案

    x
    mn
    xyz
    123
    abc
    

    将给予

    xyz
    123
    abc
    
    推荐文章