Number of intergers in a file using Command Line Interface

后端 未结 3 1899
感动是毒
感动是毒 2021-01-14 06:14

How to count number of integers in a file using egrep?

I tried to solve it as a pattern finding problem. Actually, I am facing problem of how to represent range of c

相关标签:
3条回答
  • 2021-01-14 06:30

    On my ubuntu this code working fine

    grep -P '((^)|(\s+))[-+]?\d+\.?((\s+)|($))' test
    
    0 讨论(0)
  • 2021-01-14 06:31

    Based on the observation that you want 66.88 excluded, I'm guessing

    grep -Ec '[0-9]\.?( |$)' file
    

    which finds a digit, optionally followed by a dot, followed by either a space or end of line.

    The -c option says to report the number of lines which contain a match (so not strictly the number of matches, if there are lines which contain multiple matches) and the -E option enables extended regular expression syntax, i.e. what was traditionally calned egrep (though the command name is now obsolescent).

    If you need to count matches, the -o option prints each match on a separate line, which you can then pass to wc -l (or in lucky cases combine with grep -c, but check first; this doesn't work e.g. with GNU grep currently).

    0 讨论(0)
  • 2021-01-14 06:44
                        grep -Eo '(^| )([0-9]+[\.\?\=\:]?( |$))+' | wc -w
                              ^^    ^     ^       ^        ^   ^     ^
                              ||    |     |       |        |   |     |
    E = extended regex--------+|    |     |       |        |   |     |
    o = extract what found-----+    |     |       |        |   |     |
    starts with new line or space---+     |       |        |   |     |
    digits--------------------------------+       |        |   |     |
    optional dot, question mark, etc.-------------+        |   |     |
    ends with end line or space----------------------------+   |     |
    repeat 1 time or more (to detect integers like "123 456")--+     |
    count words------------------------------------------------------+
    

    Note: 123. 123? 123: are also counted as integer

    Test:

    #!/bin/bash
    
    exec 3<<EOF
    My name is 2322.
    33 is my sister.
    I am blessed with a son named 55.
    Why are you so 69. Is everything 33.
    66.88 is not an integer
    55whereareyou?
    two integers 123 456.
    how many tables in room 400? 50.
    50? oh I thought it was 40.
    23: It's late, 23:00 already
    EOF
    
    grep -Eo '(^| )([0-9]+[\.\?\=\:]?( |$))+' <&3 | \
      tee >(sleep 0.5; echo -n "integer counted: "; wc -w; )
    

    Outputs:

     2322.
    33 
     55.
     69. 
     33.
     123 456.
     400? 50.
    50? 
     40.
    23: 
    integer counted: 12
    
    0 讨论(0)
提交回复
热议问题