Visit Our UNIX and Linux User Community


awk or sed to print the character from the previous line after the regexp match


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers awk or sed to print the character from the previous line after the regexp match
# 1  
Old 12-13-2019
awk or sed to print the character from the previous line after the regexp match

Hi All,

I need to print the characters in the previous line just before the regular expression match
Please have a look at the input file as attached
I need to match the regular expression ^ with the character of the previous like and also the pin numbers Attachment 7913
and the output file should be like this as attached
I am writing the script as stated below
sed -n '/^/{x;p;d;}; x' input_file but how to match the Pin number and character before the regular expression in a single line

awk or sed to print the character from the previous line after the regexp match-input_filepng

awk or sed to print the character from the previous line after the regexp match-output_filepng

Last edited by vbe; 12-13-2019 at 04:59 PM..
# 2  
Old 12-13-2019
Hi, could you please post the input and output sample as code segments and not as attachments?

First off: if you want to match a circumflex, you need to escape with a backslash, since it is a special character in regex:
Code:
/\^/

# 3  
Old 12-15-2019
TCL script to match and extract the substring carrying the regex

Thanks but I am not able to put the same content in the text format since the lines are not getting aligned.
Thats why I have attached the attachments

--- Post updated at 08:46 PM ---

Input file

Code:
                                       p p p p p
Pin Numbers                             3 2 1 8 9
                                        1 2 3 4 5

pattern     offset                        
scan1        2965                       H L H L H
                                            ^
scan2        2200                       L H H L H 
                                          ^
scan3        1100                       H L L L L 
                                          ^
scan4        1500                       L L H H H 
                                            ^
scan5        2800                       H H L H H
                                          ^     ^

Please have a look at the attachment
# 4  
Old 12-15-2019
Your post headings are somewhat contradictory. If happy with awk and not insist on TCL, try
Code:
awk '
NR < 4          {if (NR == 1) ST = index ($0, "p")
                 for (i=ST; i<=NF; i+=2) P[i] = P[i] $i
                 next
                }
!NF             {next
                }

/patt/          {print substr ($0, 1, ST-1), "pin-number expected"
                 next
                }

                {getline TMP
                 PTR = 0
                 while (IX = index (TMP, "^"))  {print substr ($0, 1, ST-1), P[IX+PTR], substr ($0, IX+PTR, 1)
                                                 PTR = IX
                                                 TMP = substr (TMP, PTR+1)
                                                }
                }
' FS="" file
pattern     offset                       pin-number expected
scan1        2965                        p13 H
scan2        2200                        p22 H
scan3        1100                        p22 L
scan4        1500                        p13 H
scan5        2800                        p22 H
scan5        2800                        p95 H

This User Gave Thanks to RudiC For This Post:
# 5  
Old 12-16-2019
Thanks a lot Rudic , Let me try it out
# 6  
Old 12-17-2019
Hi Rudic ,

Thanks it worked , I am trying out same script for one more input file

Code:
                              r                                     s       
                              e                                     y       
Pin Numbers                   s                                     n       
                              e p p p p p p p p p p p p p p p p p p c       
                              t a a a a a a a a a a a a a a a a a a h       
                              _ 3 3 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 r       
                              n 0 1 0 1 4 5 6 7 8 9 8 9 2 3 4 5 6 7 o       


pattern         offset   
scan0_core_p    2965          1 1 1 0 1 1 0 1 0 1 0 L L L L L H L L 0       
                                                              ^             
scan0_core_p    2967          1 1 1 1 1 0 1 0 1 1 1 H H L L L H L L 0       
                                                              ^             
scan0_core_p    2968          1 1 1 1 0 1 1 0 0 1 1 H L L L H H H L 0       
                                                              ^             
scan0_core_p    2976          1 1 1 1 0 1 1 1 1 0 0 L L H L L H H L 0       
                                                                  ^         
scan0_core_p    2977          1 1 1 1 1 0 1 1 1 1 0 L H H L L H L L 0       
                                                                  ^         
scan0_core_p    2978          1 1 1 0 0 0 1 0 1 1 0 H H L L L H L L 0       
                                                                  ^

I am changing the script so that it can work for the above stated input file
I am changing some condition in for loop , Any suggestions ?
# 7  
Old 12-17-2019
What did you try? What did you change? Where and how did it fail?

Previous Thread | Next Thread
Test Your Knowledge in Computers #49
Difficulty: Easy
A USB hard drive is considered to be a primary storage device for personal computers.
True or False?

10 More Discussions You Might Find Interesting

1. AIX

Print nth previous line after match

Please help me print nth line after match awk or sed one line command. (3 Replies)
Discussion started by: sushma123
3 Replies

2. Shell Programming and Scripting

awk script -print line when $2 > $2 of previous line

Hi all, From a while loop I am reading a sorted file where I want to print only the lines that have $1 match and $2 only when the difference from $2 from the previous line is > 30. Input would be like ... AN237 010 193019 0502 1 CSU Amoxycillin AN237 080 ... (2 Replies)
Discussion started by: gafoleyo73
2 Replies

3. Shell Programming and Scripting

sed print first line before regexp and all lines after

Hi All I'm trying to extract the line just above a regexp and all lines after this. I'm currently doing this in two steps sed -n -e "/^+---/{g;p;}" -e h oldfile.txt > modified.txt sed -e "1,/^+---/d" -e "/^$/d" oldfile.txt >>modified.txt Sample sometext will be here sometext will be... (3 Replies)
Discussion started by: Celvin VK
3 Replies

4. Shell Programming and Scripting

Remove previous line if next & previous lines have same 4th character.

I want to remove commands having no output. In below text file. bash-3.2$ cat abc_do_it.txt grpg10so>show trunk group all status grpg11so>show trunk group all status grpg12so>show trunk group all status GCPKNYAIGT73IMO 1440 1345 0 0 94 0 0 INSERVICE 93% 0%... (4 Replies)
Discussion started by: Raza Ali
4 Replies

5. Shell Programming and Scripting

awk, sed or perl regexp to print values from file

Hello all According to the following file (orignal one contains 200x times the same structure...) I was wondering if someone could help me to print <byte>??</byte> values example, running this script/command like ./script.sh xxapp I would expect as output: 102 116 112 ./script.sh xxapp2... (2 Replies)
Discussion started by: cabrao
2 Replies

6. UNIX for Dummies Questions & Answers

Awk to print data from current and previous line

Hi guys, I have found your forum super useful. However, right now I am stuck on a seemingly "simple" thing in AWK. I have two columns of data, the first column in Age (in million years) and the second column is Convergence Rate (in mm/yr). I am trying to process my data so I can use it to... (2 Replies)
Discussion started by: awk_noob_456
2 Replies

7. Shell Programming and Scripting

How to use sed to search for string and Print previous two lines and current line

Hello, Can anybody help me to correct my sed syntax to find the string and print previous two lines and current line and next one line. i am using string as "testing" netstat -v | sed -n -e '/test/{x;2!p;g;$!N;p;D;}' -e h i am able to get the previous line current line next line but... (1 Reply)
Discussion started by: nmadhuhb
1 Replies

8. Shell Programming and Scripting

awk;sed appending line to previous line....

I know this has been asked before but I just can't parse the syntax as explained. I have a set of files that has user information spread out over two lines that I wish to merge into one: User1NameLast User1NameFirst User1Address E-Mail:User1email User2NameLast User2NameFirst User2Address... (11 Replies)
Discussion started by: walkerwheeler
11 Replies

9. Shell Programming and Scripting

Print previous, current and next line using sed

Hi, how can i print the previous, current and next line using sed? current line is the matching line. The following prints all lines containing 'Failure' and also the immediate next line cat $file | sed -n -e '/Failure/{N;p;}' Now, i also want to print the previous line too. Thanks,... (8 Replies)
Discussion started by: ysrinu
8 Replies

10. UNIX for Dummies Questions & Answers

print the line immediately after a regexp; but regexp is a sentence

Good Day, Im new to scripting especially awk and sed. I just would like to ask help from you guys about a sed command that prints the line immediately after a regexp, but not the line containing the regexp. sed -n '/regexp/{n;p;}' filename What if my regexp is 3 word or a sentence. Im... (3 Replies)
Discussion started by: ownins
3 Replies

Featured Tech Videos