这是我的尝试
*.java
个文件find . -name '*.java'
wc -l
sed '$d'
wc
输出中的最大行数
awk 'max=="" || data=="" || $1 > max {max=$1 ; data=$2} END{ print max " " data}'
然后将其合并为单行
find . -name '*.java' | xargs wc -l | sed '$d' | awk 'max=="" || data=="" || $1 > max {max=$1 ; data=$2} END{ print max " " data}'
我可以以某种方式实现非空行计数吗?
答案 0 :(得分:16)
find . -type f -name "*.java" -exec grep -H -c '[^[:space:]]' {} \; | \
sort -nr -t":" -k2 | awk -F: '{print $1; exit;}'
如果您还想查看非空白行的数量,请将awk
命令替换为head -n1
。
命令细分:
find . -type f -name "*.java" -exec grep -H -c '[^[:space:]]' {} \;
'---------------------------' '-----------------------'
| |
for each *.java file Use grep to count non-empty lines
-H includes filenames in the output
(output = ./full/path/to/file.java:count)
| sort -nr -t":" -k2 | awk -F: '{print $1; exit;}'
'----------------' '-------------------------'
| |
Sort the output in Print filename of the first entry (largest count)
reverse order using the then exit immediately
second column (count)
答案 1 :(得分:7)
find . -name "*.java" -type f | xargs wc -l | sort -rn | grep -v ' total$' | head -1
答案 2 :(得分:0)
这样的事可能有用:
find . -name '*.java'|while read filename; do
nlines=`grep -v -E '^[[:space:]]*$' "$filename"|wc -l`
echo $nlines $filename
done|sort -nr|head -1
(根据Ed Morton的评论编辑。我一定有太多咖啡:-))
答案 3 :(得分:0)
使用awk获取所有文件的大小只是:
$ find . -name '*.java' -print0 | xargs -0 awk '
BEGIN { for (i=1;i<ARGC;i++) size[ARGV[i]]=0 }
{ size[FILENAME]++ }
END { for (file in size) print size[file], file }
'
要获得非空行的计数,只需将增加大小[]条件的行设为:
$ find . -name '*.java' -print0 | xargs -0 awk '
BEGIN { for (i=1;i<ARGC;i++) size[ARGV[i]]=0 }
NF { size[FILENAME]++ }
END { for (file in size) print size[file], file }
'
(如果你想把仅包含空格的行视为“空”,那么用/^./.)替换NF。
要仅获取具有最多非空行的文件,只需再次调整:
$ find . -name '*.java' -print0 | xargs -0 awk '
BEGIN { for (i=1;i<ARGC;i++) size[ARGV[i]]=0 }
NF { size[FILENAME]++ }
END {
for (file in size) {
if (size[file] >= maxSize) {
maxSize = size[file]
maxFile = file
}
}
print maxSize, maxFile
}
'