nawk and regular expression


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting nawk and regular expression
# 8  
Old 10-03-2011
Code:
$ cat input.awk
BEGIN { # Split 'lines' on --------------
        RS="--------------------------------"
        # Split 'columns' on newline
        FS="\n"
}

NR==1 { # Third-last line contains the info we want, split apart on space
        split($(NF-2), A, " ");
        V1=A[5];
        # Extract the part we want with a regex
        match($(NF-2), /[0-9]+\.[0-9]+/);
        V2=substr($(NF-2), RSTART, RLENGTH);
        # Don't let the routines below get fed this
        next    }

NR==2 { # Stop splitting on ----, start splitting on lines
        RS="\n"
        # Start splitting fields on | instead of \n
        FS="|"
        # Use | as separator when printing too
        OFS="|"
        # Don't let the routines below be fed this record
        next
}

# Only run this code block when we're on the third 'line' or more
NR>2 {
  # Set last record to string we found earlier
  $(NF)=V1
  # Set record after that to string we found earlier
  $(NF+1)=V2
# Only print when we're on the third 'line' or more and there's more than two columns
      } (NF>2)&&(NR>2)
$ awk -f input.awk < input
| 101 |BANK OF NY| 111,000 |11617N-CD-1|1.1
| 111 |FRST CLEAR| 11,000 |11617N-CD-1|1.1
| 17 |JONES E D | 11,000 |11617N-CD-1|1.1
| 111 |JPMC CLEAR| 118,000 |11617N-CD-1|1.1
| 11 |MSSB | 11,000 |11617N-CD-1|1.1
| 116 |NFS LLC | 61,000 |11617N-CD-1|1.1
| 111 |PERSHING | 1,116,000 |11617N-CD-1|1.1
| 171 |SOUTHWEST | 111,000 |11617N-CD-1|1.1
|1111 |WFB/SAFEKP| 100,000 |11617N-CD-1|1.1
$

This User Gave Thanks to Corona688 For This Post:
# 9  
Old 10-04-2011
Try this... code purely based on your input file...
Code:
awk '/CUSIP/{gsub(/[a-z]|%.*/,"",$7);_1=$5"|"$7}/^--/{f=1;next}{if(f==1)print $0 _1}' input_file

--ahamed
This User Gave Thanks to ahamed101 For This Post:
# 10  
Old 10-04-2011
Code:
$
$
$ cat input.txt
****************************************************
* *
* THE FOLLOWING IS THE SOLICITOR MAIL FILE *
* *
****************************************************
1
THE DEPOSITORY TRUST COMPANY PAGE: 1
SPECIAL SECURITY POSITION LISTING PROGRAM: PXYD0001
FOR CUSIP / DESCRIPTION: 11617N-CD-1 / CDFS1.1%081811 BE+#
POSITIONS AS OF: 08/17/11
0--------------------------------
| PARTICIPANT | QUANTITY |
--------------------------------
| 101 |BANK OF NY| 111,000 |
| 111 |FRST CLEAR| 11,000 |
| 17  |JONES E D | 11,000 |
| 111 |JPMC CLEAR| 118,000 |
| 11  |MSSB | 11,000 |
| 116 |NFS LLC | 61,000 |
| 111 |PERSHING | 1,116,000 |
| 171 |SOUTHWEST | 111,000 |
|1111 |WFB/SAFEKP| 100,000 |
$
$
$ perl -lne '/^.*CUSIP.*?: (.*?) \/ .*?([\d\.]+)%.*$/ and $x="$1|$2"; /^\|\s*\d+\s*\|.*/ and print $_,$x' input.txt
| 101 |BANK OF NY| 111,000 |11617N-CD-1|1.1
| 111 |FRST CLEAR| 11,000 |11617N-CD-1|1.1
| 17  |JONES E D | 11,000 |11617N-CD-1|1.1
| 111 |JPMC CLEAR| 118,000 |11617N-CD-1|1.1
| 11  |MSSB | 11,000 |11617N-CD-1|1.1
| 116 |NFS LLC | 61,000 |11617N-CD-1|1.1
| 111 |PERSHING | 1,116,000 |11617N-CD-1|1.1
| 171 |SOUTHWEST | 111,000 |11617N-CD-1|1.1
|1111 |WFB/SAFEKP| 100,000 |11617N-CD-1|1.1
$
$

tyler_durden
This User Gave Thanks to durden_tyler For This Post:
# 11  
Old 10-04-2011
Quote:
Originally Posted by ahamed101
Try this... code purely based on your input file...
Code:
awk '/CUSIP/{gsub(/[a-z]|%.*/,"",$7);_1=$5"|"$7}/^--/{f=1;next}{if(f==1)print $0 _1}' input_file

--ahamed
WOW !!!

What does the following regex evaluate to ?? I know the first part is small case alphabets

Code:
/[a-z]|%.*/


Last edited by ejazsyed; 10-05-2011 at 11:25 AM..
# 12  
Old 10-05-2011
A literal %, followed by zero or more characters of any kind.
# 13  
Old 10-05-2011
What is the "|" for does it means

that anything from a to z OR % followed by anything ??
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Passing regular expression to nawk

I am trying to test if I can replace a regular expression in 'nawk' with a variable. Please let me know why it is not working. I am using ksh88i on solaris8 I am trying use this test as a building block to filter active external DNS connections. Ideally I want to pass variable defined... (4 Replies)
Discussion started by: kchinnam
4 Replies

2. UNIX for Advanced & Expert Users

sed: -e expression #1, char 0: no previous regular expression

Hello All, I'm trying to extract the lines between two consecutive elements of an array from a file. My array looks like: problem_arr=(PRS111 PRS213 PRS234) j=0 while } ] do k=`expr $j + 1` sed -n "/${problem_arr}/,/${problem_arr}/p" problemid.txt ---some operation goes... (11 Replies)
Discussion started by: InduInduIndu
11 Replies

3. Programming

Perl: How to read from a file, do regular expression and then replace the found regular expression

Hi all, How am I read a file, find the match regular expression and overwrite to the same files. open DESTINATION_FILE, "<tmptravl.dat" or die "tmptravl.dat"; open NEW_DESTINATION_FILE, ">new_tmptravl.dat" or die "new_tmptravl.dat"; while (<DESTINATION_FILE>) { # print... (1 Reply)
Discussion started by: jessy83
1 Replies

4. Shell Programming and Scripting

Integer expression expected: with regular expression

CA_RELEASE has a value of 6. I need to check if that this is a numeric value. if not error. source $CA_VERSION_DATA if * ] then echo "CA_RELESE $CA_RELEASE is invalid" exit -1 fi + source /etc/ncgl/ca_version_data ++ CA_PRODUCT_ID=samxts ++ CA_RELEASE=6 ++ CA_WEEK_NO=7 ++... (3 Replies)
Discussion started by: ketkee1985
3 Replies

5. Shell Programming and Scripting

Dynamic regular expression in nawk

Hi FolksI want to write a nawk script that dynamically creates variable numbers of regular expressions on the fly rather than using constants. Is this possible?They would need to be used within an if statement within the nawk program: - if ( "my string of regex's" ) Thanks (7 Replies)
Discussion started by: steadyonabix
7 Replies

6. Shell Programming and Scripting

Help with NAWK regular expressions

I've a file $ cat size 1234 5678 vamsi I want to match the lines which has just 4 digits and nothing else. So $ cat size | nawk ' $0 ~ // {print}' 1234 5678 But when I use the repetition clause it doesn't work cat size | nawk ' $0 ~ /{4}/ {print}' I actually want to filter out the... (8 Replies)
Discussion started by: vamsi.coe
8 Replies

7. Linux

Regular expression to extract "y" from "abc/x.y.z" .... i need regular expression

Regular expression to extract "y" from "abc/x.y.z" (2 Replies)
Discussion started by: rag84dec
2 Replies

8. Shell Programming and Scripting

nawk empty regular expression error

Hello, All. please help me with this problem. i need to use variable as regular expression. some thing like this: BEGIN { RS="\n"; ORS="\n"; reg_exp = ".+Dec.+"; # i mean that regular expression is any symbol before "Dec" and any symbol after it. For example <Worksheet... (6 Replies)
Discussion started by: Rjkz
6 Replies

9. UNIX for Dummies Questions & Answers

Need help in Regular Expression

I have a file with data that looks like - record nullable { final_delim=end ,delim="~%%~" ,quote=none } ( 1_UPC:string; 2_QUANTITY:string; ) I want to fetch the first column that starts with integer. e.g - 1_UPC, 2_QUANTITY. I tried "awk -F ":" -v var1="^0-9" '$1==var1' inschemafile".... (2 Replies)
Discussion started by: mahabunta
2 Replies

10. Shell Programming and Scripting

Regular Expression + Aritmetical Expression

Is it possible to combine a regular expression with a aritmetical expression? For example, taking a 8-numbers caracter sequece and casting each output of a grep, comparing to a constant. THX! (2 Replies)
Discussion started by: Z0mby
2 Replies
Login or Register to Ask a Question