I need to extract the "0.246E+05" value for the following code. The file
Code:
#!/usr/local/bin/perl
use strict;
use warnings;
my $header = "Unnom_";
my @va = [111 222 333 444 555 666 777 888];
my @ma = [1 2 3 4 5 5a 6 7 8];
my $v;
my $m;
foreach $v (@va) {
foreach $m (@ma) {
(need to get this value from file1 ex. 0.246E+05);
$extractedvalue = (get number from /data/$m/$v/Nom_$v_$m_PUNCH)
system ("sed '2,10d' $m/$v/Nom_$v.ol.$m.input > $m/$v/$header$v.ol.$m.input"); #this creates a new file that has the first 2 lines of the $m/$v/Nom_$v.ol.$m.input file
# maybe a better way to do it would be to add this line to the added text (below) and remove the system sed command
P$WHAT PATH = '/data/$v.ol.$m.input', $
(need to add the following lines of text to the bottom of $m/$v/$header$v.ol.$m.input);
cat "
OBJECT = A, B, C, D, 1E+3,\n
CV(10) = { PRM(5) = -1.0,}, \n
CVR(10)= $extractedvalue,\n
$
"
>> $m/$v/$header$v.ol.$m.input #will this create this file if it doesn't exist? Can I create them above if the sed command is deleted?"
}
}
Thanks in advance, let me know if I poorly explained something or more info is needed.
I have been looking at your problem for a while now -- and I have no idea what you are trying to accomplish. Can you please explain? And what function is "sed" providing?
This User Gave Thanks to m.d.ludwig For This Post:
I have been looking at your problem for a while now -- and I have no idea what you are trying to accomplish. Can you please explain? And what function is "sed" providing?
what itkamaraj said is close to correct.
I need to extract the "0.246E+05" value from the first file (File1)
I then need to input this value into a newly created file with some other stuff.
For example file two should read:
Code:
Blah blah random text
random $text that has $$variables in it but I need to just be text
the above line should literally read "$text" and "$variables"
other $random text that i $need to evaluate variables
the above line should convert $random and $need to their respective values example 5 and 51
The variable $extracted_number - this number needs to be 0.246E+05
...
I need to extract the "0.246E+05" value from the first file (File1)
I then need to input this value into a newly created file with some other stuff.
For example file two should read:
Code:
Blah blah random text
random $text that has $$variables in it but I need to just be text
the above line should literally read "$text" and "$variables"
other $random text that i $need to evaluate variables
the above line should convert $random and $need to their respective values example 5 and 51
The variable $extracted_number - this number needs to be 0.246E+05
I don't quite understand the program in your first post, but the following Perl program might be able to help you out -
Code:
$
$
$ # Show the content of the file "file1". We'll make use of the fact that "CVR(10)" and "SAUCE"
$ # appear only once in the file.
$
$ cat file1
CVR( 9) = 0.385E+05, ! VEHICLE
CVR(10) = 0.246E+05, ! SAUCE
CVR(11) = 0.162E+03, ! VEHICLE
$
$
$ # Show the Perl program
$
$ cat -n file1.pl
1 #!perl -w
2 use strict;
3
4 my $random = 5;
5 my $need = 51;
6 my $extracted_number;
7 my $file = "file1";
8
9 # read the value of $extracted_number from "file1"
10 open (FH, "<", $file) or die "Can't open $file for reading: $!";
11 while (<FH>) {
12 if (/^CVR\(10\)\s*=\s*(.*?),.*?SAUCE$/) {
13 $extracted_number = $1;
14 last;
15 }
16 }
17 close (FH) or die "Can't close $file: $!";
18
19 # We have read the value of $extracted_number now; it will be used
20 # while printing the string below
21 my $str = <<"EOF";
22 Blah blah random text
23 random \$text that has \$\$variables in it but I need to just be text
24 the above line should literally read "\$text" and "\$variables"
25 other $random text that i $need to evaluate variables
26 the above line should convert \$random and \$need to their respective values example 5 and 51
27 The variable $extracted_number - this number needs to be 0.246E+05
28 EOF
29
30 print $str;
$
$
$ # Execute the Perl program
$
$ perl file1.pl
Blah blah random text
random $text that has $$variables in it but I need to just be text
the above line should literally read "$text" and "$variables"
other 5 text that i 51 to evaluate variables
the above line should convert $random and $need to their respective values example 5 and 51
The variable 0.246E+05 - this number needs to be 0.246E+05
$
$
$
tyler_durden
This User Gave Thanks to durden_tyler For This Post:
yea! that looks great, I don't understand this line:
if (/^CVR\(10\)\s*=\s*(.*?),.*?SAUCE$/)
I understand that it is looking for CVR(10) and SAUCE, is there some documentation to explain all the '' \?*,./ '' business? looks like gibberish to me.
Anyway works great that's what I needed, the "EOF" is quite useful
I understand that it is looking for CVR(10) and SAUCE,
...
Here's a breakup of the entire regular expression -
Code:
/^CVR\(10\)\s*=\s*(.*?),.*?SAUCE$/ =>See if the current line matches the regular expression that:^ : has at the beginningCVF : the characters "C", "V", "R", followed by\( : an open-parenthesis character (the escape character is necessary because we want Perl to consider its literal value)10 : followed by the characters "1", "0", followed by\) : a close-parenthesis character (escaping is necessary because we want Perl to consider its literal value)\s* : followed by 0 or more occurrences of whitespace characters= : followed by the "=" character\s* : followed by 0 or more occurrences of whitespace characters(.*?), : followed by the shortest continuous sequence of characters that ends with the comma character (","); group and capture this shortest continuous sequence of characters in a variable called "$1". This "grouping and capturing" is achieved by the parentheses; note that they are not escaped here, because we want Perl to consider their special (and not literal) values here.*?S : followed by shortest continuous sequence of characters that is followed by the character "S"AUCE : followed by the characters "A", "U", "C", "E"$ : thereby reaching the end of the line
If the line does not match the regular expression, the "if" condition is false and we go to the next line.
If the line does match the regular expression, then we copy the value in "$1" to "$extracted_value" and stop processing the file (that is achieved by the "last" statement).
Since the CVR, SAUCE exists in the file only once, we don't spend time unnecessarily going through the remainder of the file once we find the extracted value. Imagine what would happen if the file had 100 million lines and the CVR, SAUCE was the 1st or 2nd line.
Quote:
...
is there some documentation to explain all the '' \?*,./ '' business? looks like gibberish to me.
Anyway works great that's what I needed, the "EOF" is quite useful...
The "\?*,./ business" is ".*?" really, and it means "non-greedy/lazy quantifier". It's a part of the powerful tool called "regular expressions" and you'll inevitably encounter it while studying regular expressions. The Web and the world of books abound in information about regular expressions, and few that come to mind are as follows.
Code:
(1) The most well-known book on regexes is this one:Mastering Regular Expressions, 3rd Ed by Jeffrey Friedl - Chapter 3: Overview of Regular Expressions Features and Flavors, Section "Lazy Quantifiers"Chapter 4: The Mechanics of Expression Processing - entire chapter provides detailed information of backtracking, greediness and laziness(2) Jan Goyvaerts, the author of "Regular Expressions Cookbook", has a website on regular expressions, and he explains greediness/laziness over there:http://www.regular-expressions.info/repeat.html(3) The online Perl documentation has a really good tutorial on regexes. The section "Matching Repetitions" explains this concept:http://perldoc.perl.org/perlretut.html#Matching-repetitions
tyler_durden
Last edited by durden_tyler; 12-02-2011 at 02:55 PM..
I have file which contains a huge amount of data. I need to search the pattern Message id. When that pattern is matched I need to get abcdeff0-1g6g-91g3-1z2z-2mm605m90000 to another file.
Kindly provide your input.
File is like below
Jan 11 04:05:10 linux100 |NOTICE... (2 Replies)
I have a text file that has many lines, and for each line I need to extract different sections of text, then write several variables from the data.
I can split out the various sections by selecting their position on each line as the column sizes will never vary.
A sample of my text file is below... (2 Replies)
Hi friend i have input as following XML file
<?xml version="1.0"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.02">
<BkToCstmrDbtCdtNtfctn>
<GrpHdr><MsgId>LBP-RDJ-TE000000-130042430010001001</MsgId><CreDtTm>2013-01-04T03:21:30</CreDtTm></GrpHdr>... (3 Replies)
i'm trying to write a bash script that that will automatically extract zip files after the download.
i writed this script
#!/bin/bash
wget -c https://github.com/RonGokhle/kernel-downloader/zipball/master
CURRENDIR=/home/kernel-downloader
cd $CURRENDIR
rm $CURRENDIR/zipfiles 2>/dev/null
... (2 Replies)
dear all,
i need your advice
i have sample script like this:
testing.sh
for i in {1..10}
do
echo testing $i
done
but i forgot create "#!/bin/bash" in above "for"
so i want output will like this
testing.sh
#!/bin/bash
for i in {1..10}
do
echo testing $i
done (2 Replies)
Dear all,
I am trying to extract a number from a line in one file (task 1), duplicate another file (task 2) and replace all instances of the strings 300, in duplicated with the extracted number (task 3). Here is what I have tried so far:
for ((k=1;k<4;k++)); do
temp=`sed -n "${k}p"... (2 Replies)
Hello fourm members,
I want to write a script to extarct paticular strings from the all type of files(.sh files,logfiles,txtfiles) and redirect into a log file.
example:
I have to find the line below in the script and extract the uname and Pwds.
sqsh -scia2007 -DD0011uw01 -uciadev... (5 Replies)
Hi All,
I am having an XML tag like:
<detail sim_ser_no_1="898407109001000090"
imsi_1="452070001000090">
<security>ADM1=????</security>
<security>PIN1=????</security>
<security>PIN2=????</security>
... (2 Replies)
Hi,
This is the first time playing around with perl and need some help.
Assuming if i have a line of text that looks like this:
Date/Time=Nov 18 17:12:11;Device Name=192.168.1.1;Device IP=192.168.1.1;Device Class=IDS;Source IP=155.212.212.111;Source Name=UNKNOWN;Source Port=1679... (3 Replies)