Friday, July 29, 2011

Count lines in multiple files using Windows command prompt

Not really Oracle-related, but I'm posting this as a reminder to myself and possibly useful to others.

To count the number of lines in a given set of files using the Windows command prompt, do the following:

for %G in (*.sql) do find /c /v "_+_" %G

This invokes the "find" command once for each file, counting the lines that do NOT contain the string "_+_" (the string has no special significance, any weird string that would not occur "naturally" in the files can be used).

There are probably more sophisticated ways of doing this, perhaps using PowerShell and whatnot. Leave a comment if you know of other methods (something that adds together all the file line counts into one grand total would be even better).

4 comments:

  1. Powershell method with grand total: Get-ChildItem *.sql | where-object {$_.name -notmatch '+'} | get-content | measure-object

    ReplyDelete
  2. I like to use cygwin (a unix/linux emulator for Windows) for this type of thing:

    wc *.sql

    wc -l *.txt
    for just the number of lines

    ReplyDelete
  3. With help from code from Tom Lavedas at http://social.technet.microsoft.com/Forums/en-US/ITCG/thread/d842e715-fbba-49ef-8863-3c944c4e60a5/, I wrote this batch file which displays both number of lines for each file and total number of lines for all files.


    @echo off
    setlocal
    if not [%1]==[] pushd %1
    for /r %%F in (*.sql) do call :sub "%%F"
    echo Total lines in %Files% files: %Total%
    popd
    exit /b 0
    :Sub
    set /a Cnt=0
    for /f %%n in ('type %1') do set /a Cnt+=1
    set /a Total+=Cnt
    set /a Files+=1
    echo %1: %Cnt% lines

    ReplyDelete
  4. ^^ Results into a lock. Have to terminate the batch.

    ReplyDelete