Skip to content

Instantly share code, notes, and snippets.

@daniellansun
Last active February 20, 2019 23:40
Show Gist options
  • Save daniellansun/7fa18ab64b70d54abc6b80597afd3a8c to your computer and use it in GitHub Desktop.
Save daniellansun/7fa18ab64b70d54abc6b80597afd3a8c to your computer and use it in GitHub Desktop.
Count the line count of source files
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
if (!args) {
println "Usage: groovy CountLines.groovy <dir> [extension1] [extensionN]"
return
}
def extSet = (args.size() > 1 ? args[1..-1] : []).collect { it.toLowerCase() } as HashSet
def fileInfoList = []
new File(args[0]).eachFileRecurse {
if (it.isDirectory()) return
def ext = it.name.substring(it.name.lastIndexOf('.') + 1)
if (extSet && !extSet.contains(ext.toLowerCase())) return
fileInfoList << new Tuple2(ext, it.readLines().size())
}
fileInfoList.groupBy {
it.v1
}.each { k, v ->
println "${k}\t\t${ v.size() }\t\t${ v.sum(tuple -> tuple.v2)}"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment