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

有帮助吗?

解决方案

使用wc(GNU的coreutils)7.4:

wc -L filename

给出:

101 filename

其他提示

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

有关参考:查找在文件最长行

awk '{ if (length($0) > max) {max = length($0); maxline = $0} } END { print maxline }'  YOURFILE 

只是为了好玩和教育目的,在纯POSIX壳溶液下,没有无用的使用猫的和没有分路到外部命令。取文件名作为第一个参数:

#!/bin/sh

MAX=0 IFS=
while read -r line; do
  if [ ${#line} -gt $MAX ]; then MAX=${#line}; fi
done < "$1"
printf "$MAX\n"
wc -L < filename

给出

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

打印长度,行号,和所述最长行的内容

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

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

.是连接运算符 - 它是长度后这里使用(),点击 $.是当前行号结果 $_是当前行

在上面的例子中重要忽视的一点。

下面的实施例2计数膨胀的突出部

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

下面的2个计数非用不了两年时间标签。

  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

看起来所有的答案不给最长行的行号。下面的命令可以给出的行号和大致长度:

$ 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

在perl的:

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

此只打印线,而不是其长度太

下面是anwser的引用

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

http://wtanaka.com/node/7719

只是为了好玩,这里的Powershell的版本:

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

和只得到长度:

(cat filename.txt | sort length | select -last 1).Length

我在 Unix 环境中,使用大小为几 GB 的 gzip 压缩文件。我使用记录长度为 2052 的 2 GB 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"

的主题变化。

这一个将显示的具有文件中找到的最长行的长度,保持它们出现在源顺序所有行。

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

所以MYFILE

x
mn
xyz
123
abc

会给

xyz
123
abc
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top