我正在寻找一种简单的方法来查找文件中最长行的长度。理想情况下,它应该是一个简单的Bash shell命令,而不是一个脚本。
使用 wc (GNU coreutils) 7.4 版本:
wc -L filename
提供:
101 filename
-c -l -m -w
选项符合 POSIX 标准。-L
是 GNU 特有的。 - Jens-L
的结果取决于语言环境。有些字符(无论是字节还是多字节)甚至可能根本不被计算在内! - Walter Trosswc: illegal option -- L usage: wc [-clmw] [file ...]
OS X系统中,运行wc
命令时出现错误提示:wc: illegal option -- L usage: wc [-clmw] [file ...]
。 - Hugogwc
是 coreutils
公式中的一部分,安装所有带有 g
前缀的 GNU 核心工具。 - gsneddersawk '{print length, $0}' Input_file |sort -nr|head -1
供参考:在文件中查找最长的行
END{}
块中打印出来。 - Luv2codeawk '{ if (length($0) > max) {max = length($0); maxline = $0} } END { print maxline }' YOURFILE
awk '{ if (length($0) > max) max = length($0) } END { print max }' YOURFILE
- ke20awk 'length>max{max=length}END{print max}' file
- Chris Seymourawk '{ if (length($0) > max) {max = length($0); maxline = $0} } END { print maxline }' YOURFILE | wc -c
- Nick... END { print length(maxline) + 1}
因为 awk 会去掉换行符,所以 wc -c
命令得到的字符数会比最长记录少一个字节。 - Luv2code为了娱乐和教育目的,以下是纯粹的POSIX shell解决方案,没有无用的cat使用和不需要调用外部命令。将文件名作为第一个参数:
#!/bin/sh
MAX=0 IFS=
while read -r line; do
if [ ${#line} -gt $MAX ]; then MAX=${#line}; fi
done < "$1"
printf "$MAX\n"
< "$1"
的话它可以很容易地从标准输入读取。通过对 $#
进行测试,它甚至可以根据参数数量同时实现两者。在这个世界上没有无用的 cat 命令。新手应该从一开始就学会正确的方法。 - Jenslongest < /usr/share/dict/words
。function longest () {
MAX=0 IFS=
while read -r line; do
if [ ${#line} -gt $MAX ]; then MAX=${#line}; fi
done
echo $MAX
}
- skierpagewc -L < filename
提供
101
wc
输出文件名 :) - Peter.Operl -ne 'print length()." line $. $_"' myfile | sort -nr | head -n 1
打印最长行的长度、行号和内容
perl -ne 'print length()." line $. $_"' myfile | sort -n
打印按行排序的列表,包括行号和长度
.
是连接运算符 - 此处在length()后使用
$.
是当前行号
$_
是当前行
wc -L
是我目前看到的最佳解决方案。 - Tagarwc -L
只花费了3秒钟。 - Chris Koknatwc -L
只是计算记录数,而这个问题是关于查找最长行的,两者并不完全相同,因此这不是准确的比较。 - Tagar看起来所有的答案都没有给出最长行的行号。以下命令可以给出行号和大致长度:
$ 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
awk '{print length}' test.txt | sort -rn | head -1
. 如果你也需要实际行的内容,则为 awk '{print length,$0}' test.txt | sort -k1 -rn| head -1
- kakoma wc -L <"${SourceFile}"
# or
expand --tabs=8 "${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}"
so
Expanded nonexpanded
$'nn\tnn' 10 5
仅供娱乐,这是 Powershell 版本:
cat filename.txt | sort length | select -last 1
如果只需要获取长度:
(cat filename.txt | sort length | select -last 1).Length
sort
命令可以将 filename.txt
作为参数吗?如果可以的话,那么 cat
命令就没用了,因为 sort length filename.txt | select -last 1
可以避免使用管道和复制数据的过程。 - Jens