题
我正在寻找一种简单的方法来查找文件中最长行的长度。理想情况下,它是一个简单的 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
此只打印线,而不是其长度太
只是为了好玩,这里的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 压缩文件测试了以下命令。
zcat <gzipped file> | wc -L
和
zcat <gzipped file> | awk '{print length}' | sort -u
时间是平均的
117秒
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
不隶属于 StackOverflow