7

This is in reference to another question: How do I use robocopy to list all files over a certain size recursively?

I would like to parse output of a command (or cat a log file) and find a string value, convert it to an integer and then see if that integer value is greater than a given integer.

For instance, given the line:

      *EXTRA File          78223    C:\_Google.Enterprise.Contract.2010-06-01.pdf

I'd like to compare '78223' to '10485760'. Is this possible with grep or sed?

Thanks!

4
  • 2
    You probably awk, or a scripting language for numerical comparisons.
    – Zoredache
    Sep 2, 2011 at 19:48
  • 1
    Tho should have been moved to the UNIX stackexchange.
    – Jim B
    Dec 3, 2015 at 5:30
  • @JimB : possibly, but Questions older than 60 days can't be migrated.
    – HBruijn
    Dec 4, 2015 at 10:17
  • It's a Windows question... just gaze upon the path.
    – brandeded
    Dec 24, 2015 at 12:42

4 Answers 4

14

Use awk as follows:

$ echo '*EXTRA File     78223    C:\foo.pdf' | awk '$3 > 1048576 {print $0;}'
$ echo '*EXTRA File     78223    C:\foo.pdf' | awk '$3 > 40000 {print $0;}'
*EXTRA File     78223    C:\foo.pdf
1
  • Thanks. Not familiar with awk. It looks to be very handy.
    – brandeded
    Sep 2, 2011 at 20:15
4

Also - if you're using a Unix-like userland (like UnxUtils or Cygwin, if you're on Windows), you can use find with the -size parameter to get your file list directly, and then pipe to xargs and do whatever you're trying to do with the selected files.

The general answer to your question (interesting comparisons and other operations) is indeed awk or bash (with bc) or perl - but the specific scenario lends itself to find.

2
2

In pure Bash:

while read -r _ _ size _; do ((size > 10485760)) && echo "hit"; done < foo.log
1
  • This can be easily modified to report any field(s) or the entire line if there is a match, and/or custom-define the comparison integer at runtime. If you want that, just LMK.
    – astrostl
    Sep 2, 2011 at 20:22
0

Perl can be used similarly to awk:

echo '*EXTRA File 78223 C:\foo.pdf' | perl -ane 'print if $F[2] > 40000'

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .