Extract n-digits from string in perl


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Extract n-digits from string in perl
# 8  
Old 09-11-2017
Quote:
Originally Posted by durden_tyler
In a Perl program, you'd accept the input log file name (if so desired), open it, loop/process through it and then close it.
Here's a short program called "process_log.pl".
Hopefully the inline comments are descriptive enough.

Code:
$
$
$ cat -n mylog_1.txt
     1  01/05/2017 10:23:41 [ABCD-22357$0]: file.log.38: database error, MODE=SINGLE, LEVEL=critical, STATE: 01170255 (mode main
     2  something else
     3  over here
     4  01/05/2017 10:23:41 [ABCD-22357$0]: file.log.38: database error, MODE=SINGLE, LEVEL=critical, BLAH: 12345678 (mode main
     5  some other stuff
$
$
$ cat -n process_log.pl
     1  #!/usr/bin/perl -w
     2  # ------------------------------------------------------------------------------
     3  # Name : process_log.pl
     4  # Desc : A short and quick Perl program to process log files. It performs
     5  #        rudimentary input validation and error handling.
     6  # Usage: perl process_log.pl <log_file>
     7  # ------------------------------------------------------------------------------
     8  use strict;
     9
    10  # Print usage and quit if incorrect number of parameters were passed.
    11  if ($#ARGV != 0) {
    12      print "Usage: perl process_log.pl <log_file>\n";
    13      exit 1;
    14  }
    15
    16  # Set the file name. Hopefully it can be opened!
    17  my $file = $ARGV[0];
    18
    19  # Open file, loop through each line and process, close file
    20  open(FH, "<", $file) or die "Can't open $file: $!";
    21  while (<FH>) {
    22      # Remove the end of line character
    23      chomp;
    24      if (/(STATE|BLAH):\s+(\d+)/) {
    25          print $2, "\n";
    26      }
    27  }
    28  close(FH) or die "Can't close $file: $!";
    29
$
$ # Test with no parameters
$ perl process_log.pl
Usage: perl process_log.pl <log_file>
$
$ # Test with a file name that cannot be found or opened
$ perl process_log.pl does_not_exist.txt
Can't open does_not_exist.txt: No such file or directory at process_log.pl line 20.
$
$ # Test with the correct file
$ perl process_log.pl mylog_1.txt
01170255
12345678
$
$

A few notes if I may.

For demonstration is alright, but there is not reason to remove the newline
Code:
22      # Remove the end of line character
23      chomp;


The first group can be ignored, using the ?: and it will make it more efficient. Also, it is fine to print without concatenation.

Code:
24      if (/(STATE|BLAH):\s+(\d+)/) {
25          print $2, "\n";
26      }

Code:
if (/(?:STATE|BLAH):\s+(\d+)/) {
    print "$1\n";
}

Now, that code only accept input from one file. Another version that can accept input from multiple files or even from a pipe, follows:

Code:
#!/usr/bin/perl

use strict;
use warnings;

while(<>) {
    /(?:STATE|BLAH):\s+(\d+)/ and print "$1\n";
}

This can be use as:
Code:
perl process_log.pl mylog_1.txt mylog_2.txt [...]

or
Code:
another_program_stream_output | perl process_log.pl

This User Gave Thanks to Aia For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How can I extract digits at the end of a string in UNIX shell scripting?

How can I extract digits at the end of a string in UNIX shell scripting or perl? cat file.txt abc_d123_4567.txt A246_B789.txt B123cc099.txt a123_B234-012.txt a13.txt What can I do here? Many thanks. cat file.txt | sed "s/.txt$//" | ........ 4567 789 099 012 13 (11 Replies)
Discussion started by: mingch
11 Replies

2. Shell Programming and Scripting

awk extract certain digits from file with index substr

I would like to extract a digit from $0 starting 2,30 to 3,99 or 2.30 to 3.99 Can somebody fix this? awk --re-interval '{if($0 ~ /{1}{2}/) {print FILENAME, substr($0,index($0,/{1}{2}/) , 4)}}'input abcdefg sdlfkj 3,29 g. lasdfj alsdfjasl 2.86 gr. slkjds sldkd lskdjfsl sdfkj kdjlksj 3,34 g... (4 Replies)
Discussion started by: sdf
4 Replies

3. Shell Programming and Scripting

extract digits from a string in unix

Hi all, i have such string stored in a variable var1 = 00000120 i want the o/p var1 = 120 is it possible to have such o/p in ksh/bash ... thanx in advance for the help sonu (3 Replies)
Discussion started by: sonu_pal
3 Replies

4. Shell Programming and Scripting

extract string and sending it into a new file in perl program

Hi, I have a input file with following values (test.out) I would like to grep all lines with word 'PANIC' and sent it another file using perl program with grep command. I have been trying different ways and not working. Pls advice. Thanks a lot for the help. --example--... (3 Replies)
Discussion started by: hudson03051nh
3 Replies

5. Shell Programming and Scripting

Perl REGEX - How do extract a string in a line?

Hi Guys, In the following line: cn=portal.090710.191533.428571000,cn=groups,dc=mp,dc=rj,dc=gov,dc=br I need to extract this string: portal.090710.191533.428571000 As you can see this string always will be bettween "cn=" and "," strings. Someone know one regular expression to... (4 Replies)
Discussion started by: maverick-ski
4 Replies

6. Shell Programming and Scripting

Perl Extract String

Hi, I have a string like "something is good wanted (bla bla)" I need to get the world "wanted" from this string and "assign it to a variable".. but it's not a static word so i want to get that word by searching the pattern as follows <space>desiredword<space>( and i tried to get that... (6 Replies)
Discussion started by: xlynx3
6 Replies

7. Shell Programming and Scripting

Isolate and Extract a Pattern Substring (Digits Only)

Hi guys, I have a text file report generated from egrepping multiple files. The text files themselves are obtianed after many succesive refinements, so they contain already the desired number, but this is surrounded by unwanted characters, newlines, spaces, it is not always at the start of the... (6 Replies)
Discussion started by: netfreighter
6 Replies

8. Shell Programming and Scripting

perl newbie: how to extract an unknown word from a string

hi, im quite new to perl regexp. i have a problem where i want to extract a word from a given string. but the word is unknown, only fact is that it appears as the second word in the string. Eg. input string(s) : char var1 = 'A'; int var2 = 10; char *ptr; and what i want to do is... (3 Replies)
Discussion started by: wolwy_pete
3 Replies

9. Shell Programming and Scripting

Extract digits at end of string

I have a string like xxxxxx44. What's the best way to extract the digits (one or more) in a ksh script? Thanks (6 Replies)
Discussion started by: offirc
6 Replies

10. UNIX for Dummies Questions & Answers

to check if a string has only digits

Hi guys, I am not very experienced in writing ksh scripts and I am trying to write a piece of code that indicates if a given string contains only digits and no alphabet (upper or lower case). If i write it my way it would turn out to have a lot of comparisons.. :eek: Thanks a lot in... (3 Replies)
Discussion started by: lakshmikanth
3 Replies
Login or Register to Ask a Question