perl or awk print strings between words


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting perl or awk print strings between words
# 1  
Old 08-16-2010
perl or awk print strings between words

hi everyone,

1.txt
Code:
981 I field1 > field2.a: aa, ..si01To:<f:a@a.com>From: <f:a@a.com>;tag=DVNgfRZBZRMi96 <f:a@1:333>;ZZZZZ: 12345

the output
Code:
field1 field2 <f:a@a.com>

the output is cut the string 3rd and 5th field, and get the value betwee "To:" and "From:", please advice.

Thanks

i know i can
Code:
awk 'BEGIN{FS="To:";RS="From:"}/</{print $2}' 1

to get <f:a@a.com>, but how to at the same time get 3rd and 5th field.

This is only way i can figure out, but very not 'smart'
Code:
cat 1 | cut -f3,5 -d' ';awk 'BEGIN{FS="To:";RS="From:"}/</{print $2}' 1

but when 1.txt has many lines, then problem Smilie

if multiple lines, then i can use cat first, then awk, then paste two files. haha, very not 'smart' solution

Last edited by jimmy_y; 08-16-2010 at 12:28 PM..
# 2  
Old 08-16-2010
Quote:
Originally Posted by jimmy_y
...
1.txt
Code:
981 I field1 > field2.a: aa, ..si01To:<f:a@a.com>From: <f:a@a.com>;tag=DVNgfRZBZRMi96 <f:a@1:333>;ZZZZZ: 12345

the output
Code:
field1 field2 <f:a@a.com>

the output is cut the string 3rd and 5th field, and get the value betwee "To:" and "From:"...

Code:
$
$
$ cat f2
981 I field1 > field2.a: aa, ..si01To:<f:a@a.com>From: <f:a@a.com>;tag=DVNgfRZBZRMi96 <f:a@1:333>;ZZZZZ: 12345
$
$
$ perl -lne '/^\w+\s+\w+\s+(\w+)\s+\>\s+(\w+).*?To:(.*?)From:.*$/ and print "$1 $2 $3"' f2
field1 field2 <f:a@a.com>
$
$ perl -lane '$F[4]=~s/(\w+).*/$1/; $F[6]=~s/.*To:(.*?)From:/$1/; print "$F[2] $F[4] $F[6]"' f2
field1 field2 <f:a@a.com>
$
$

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

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

awk to print filename words along with delimiter

Hi, I have filename as: 010020001_S-FOR-Sort-SYEXC_20180109_062320_0100.x937 I need first 5 words of my filename along with the respective delimiters: I tried this: f=010020001_S-FOR-Sort-SYEXC_20180109_062320_0100.x937 echo $f | awk -F '' '{print $1$2$3$4$5}' 010020001SFORSortSYEXC ... (11 Replies)
Discussion started by: gnnsprapa
11 Replies

2. UNIX for Beginners Questions & Answers

Match Strings between two files, print portions of each file together when matched ([g]awk)

I have two files and desire to use the strings from $1 of file 1 (file1.txt) as search criteria to find matches in $2 of file 2 (file2.txt). If matches are found I want to output the entire line of file 2 (file2.txt) followed by fields $2-$11 of file 1 (file1.txt). I can find the matches, I cannot... (7 Replies)
Discussion started by: jvoot
7 Replies

3. UNIX for Beginners Questions & Answers

How to use awk to print strings with anchors?

I have a list of countries and I'm trying to print the country names that start with "A" and end in "a". I can do the first one which gives me the correct output. awk '/^A/ {print $1}' countries.txt but when I try: awk '/^A a$/ {print $1}' countries.txt or even: awk... (2 Replies)
Discussion started by: steezuschrist96
2 Replies

4. Shell Programming and Scripting

Looking for an awk command to print strings only if substring is missing

I have a file that I need to find each interface that has move-group on the interface line and print this line if the lines under the interface does Not have "filter-shared 14". Example file: interface 1/1/1/0 move-group decription one one one zero no shut filter-shared 14... (21 Replies)
Discussion started by: numele
21 Replies

5. Shell Programming and Scripting

Search strings and highlight them using Perl or bash/awk/sed

Hi, I have two files: a.doc and b.txt I wish to search the strings from file b.txt in a.doc and want to highlight them in a.doc with different colours using Perl or bash./awk/sed? Please guide me. :) Thanks!!!!! (10 Replies)
Discussion started by: bioinfo
10 Replies

6. Shell Programming and Scripting

Print strings that match pattern with awk

I have a file with many lines which contain strings like .. etc. But with no rule regarding field separators or anything else. I want to print ONLY THE STRING from each line , not the entire line !!! For example from the lines : Flow on service executed with success in . Performances... (5 Replies)
Discussion started by: black_fender
5 Replies

7. Shell Programming and Scripting

Print lines between two strings multiple occurencies (with sed, awk, or grep)

Hello, I can extract lines in a file, between two strings but only one time. If there are multiple occurencies, my command show only one block. Example, monfichier.txt contains : debut_sect texte L1 texte L2 texte L3 texte L4 fin_sect donnees inutiles 1 donnees inutiles 2 ... (8 Replies)
Discussion started by: theclem35
8 Replies

8. Shell Programming and Scripting

awk strings search + print next column after match

Hi, I have a file filled with search strings which have a blank in between and look like this: S. g. Ehr. o. Jg. v. d. Chijs g. Ehr. Now i would like to search for the strings and it also shall return the next column after the match. awk -v FILE="search_strings.txt" 'BEGIN {... (10 Replies)
Discussion started by: sdf
10 Replies

9. Shell Programming and Scripting

Compare strings between 2 arrays and print number in AWK

Hi to everyone, Please some help over here. Hi have array a with 6 elements and array b with 3 elements as shown inside BEGIN{} statement. I need help to get the correct sintax (the part in red) to compare if string from array b is in array a and print the number related for each match.... (3 Replies)
Discussion started by: Ophiuchus
3 Replies

10. Shell Programming and Scripting

How to print only lines in between two strings using awk

Hi, I want to print only lines in between two strings and not the strings using awk. Eg: OUTPUT top 2 bottom 1 left 0 right 0 page 66 END I want to print into a new file only top 2 bottom 1 left 0... (4 Replies)
Discussion started by: jisha
4 Replies
Login or Register to Ask a Question