查找目录中所有文本文件中最长行的长度


16

我知道如何获得文本文件中最长行的长度 awk

awk ' { if ( length > L ) { L=length} }END{ print L}' file.txt

但是如何获取目录中所有文件的最长行的长度?

Answers:


11

最直接的解决方案是连接所有文件并将结果通过管道传递到脚本:

cat ./* | awk '{ if ( length > L ) { L=length} }END{ print L}'

您还可以直接将几个文件传递给awk:

awk '{ if ( length > L ) { L=length} }END{ print L}' ./*

当然,如果文件实际上在目录中,则可能会有一些警告,但它应该无害。二进制文件可能没有更大的问题,因为它们没有line的概念。因此,为了更具体一点,您可以执行以下操作

 awk '{ if ( length > L ) { L=length} }END{ print L}' ./*.txt

仅匹配.txt当前目录中的文件。

并且,正如@ G-Man在他的评论中所述,*将不匹配隐藏文件(以点开头)。如果需要这些,请使用* .*


或者,可以说cat * .* | ...。或消除无用使用并说出awk '...' * .*
G-Man说'Resstate Monica'

@ G-Man确实。当您发表评论时,我正在编辑有关此问题的答案。:-)我说的最简单,因为起初用cat串联文件似乎更简单。
lgeorget 2014年

4

使用GNU wc

cat *.txt|wc -L

-L 打印最长行的长度。


4

如果要每个文件的最大长度,请使用GNU awk:

find . -type f -exec awk -v l=0 '
   length>l {l=length} ENDFILE{print FILENAME ":", l; l=0}' {} +

或所有文件中的一个最大长度:

find . -type f -size +1c -exec cat {} + |
  awk -v l=0 'length>l {l=length}; END{print l}'

假定文件以换行符结尾。如果一个文件没有以换行符结尾,则其最后一个非定界行将与下一个文件的第一行合并,并可能使结果无效。

-size +1c 是一种优化,因为文本文件为空或仅包含一个字符的行分别为0行和1空行,因此不会有最长的行。


它们是文本文件,因此它们以换行符结尾(除非为空)。
吉尔斯(Gilles)'“ SO-不要邪恶”

0

同样在GNU wc(coreutils 8.4)中,它可以处理多个文件

wc -L *.txt
  • 列出每个文件的长度
  • 并提供所有文件的最长长度

从本质上讲,这就是其他答案所提到的wc -L,但是您的解决方案具有一个缺点,即您必须首先浏览所有其他文件的最大长度。有什么好处吗?
Anthon
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.