Visit Our UNIX and Linux User Community


how Print previous line ..........


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting how Print previous line ..........
# 1  
Old 08-04-2009
how Print previous line ..........

HELLO...I wanted to ask you, than sure know unix more than me, as I can obtain the following solution: I have a file with rows of the type:

CIAO COME STAI
PERCHE COME STAI
CIAO COME VA
ALLO CHE FACCIAMO
.................

I would that if in a line is present the word (for example) " CHE " then i can print in video the previous three lines at the word "CHE" obtaining therefore:
CIAO COME STAI
PERCHE COME STAI
CIAO COME VA

As shell i use the KORN SHELL...thanks a lot and sorry for my bad english...
# 2  
Old 08-04-2009
Using ksh, bash, ...
Code:
#!/bin/ksh
# script
l1=""
l2=""
l3=""
while read line
do
     case "$line" in
        *" CHE"*) echo "$l1"
                     echo "$l2"
                     echo "$l3"
                     l1=""  l2=""  l3=""
                    continue
                    ;;
     esac
     l1="$l2"
     l2="$l3"
     l3="$line"
done

Code:
chmod a+rx script
cat somefile | ./script

# 3  
Old 08-04-2009
Code:
grep -B3 'CHE' file |grep -v 'CHE'

# 4  
Old 08-04-2009
This should do you:

Code:
#  awk '
/ CHE / { for (x=1;x<4;x++){print t[NR-x]}}
{t[NR]=$0}
' infile

HTH
# 5  
Old 08-04-2009
A Perl solution, just for completeness:
Code:
perl -ne 'BEGIN{ @a=("","",""); } print @a if /\bCHE\b/; push @a, $_; shift @a;' infile

# 6  
Old 08-04-2009
Quote:
Originally Posted by johnbach
Code:
grep -B3 'CHE' file |grep -v 'CHE'

-B3 is not so usable in all *nix.

grep

- B3, Gnu extension - my quess.
# 7  
Old 08-04-2009
Code:
awk -v v="CHE" '{_[NR]=$0}{for(x=0;x++<NF;)if($x==v){for(y=4;--y;) print _[(NR-y)];printf "\n"}}' file


Previous Thread | Next Thread
Test Your Knowledge in Computers #106
Difficulty: Easy
A kernel is at the heart of the Linux OS; and this kernel acts as an interface between the user and underlying hardware.
True or False?

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

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 and the output file should be like... (6 Replies)
Discussion started by: kshitij
6 Replies

2. 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

3. Shell Programming and Scripting

How to print previous line of multiple pattern matched line?

Hello, I have below format log file, Comparing csv_converted_files/2201/9747.1012H67126.5077292103609547345.csv and csv_converted_files/22019/97447.1012H67126.5077292103609547345.csv Comparing csv_converted_files/2559/9447.1012H67126.5077292103609547345.csv and... (6 Replies)
Discussion started by: arvindshukla81
6 Replies

4. 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

5. Shell Programming and Scripting

print range of lines matching pattern and previous line

Hi all, on Solaris 10, I'd like to print a range of lines starting at pattern but also including the very first line before pattern. the following doesn't print the range starting at pattern and going down to the end of file: cat <my file> | sed -n -e '/<pattern>{x;p;}/' I need to include the... (1 Reply)
Discussion started by: siriche
1 Replies

6. Shell Programming and Scripting

Print a field from the previous line

plz help me!! I have this file , 3408 5600 3796 6035 4200 6285 4676 0 40 1554 200 1998 652 2451 864 2728 1200 0 I want it like if $2==0,replace it with field from the previous line+500 say here the o/p would be like 3408 5600 3796 6035 4200 6285... (16 Replies)
Discussion started by: Indra2011
16 Replies

7. 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

8. Shell Programming and Scripting

Print the previous line

My requirement is that when ever search criteria matchs in log file, the previous line just above the search word as well as search word should be print. sample log file --03-19T11:26 xxx create version "a.sh@@/main/6" "104157 " --03-18T16:01 xxx create version "a.sh@@/main/5" ... (6 Replies)
Discussion started by: jadoo_c2
6 Replies

9. 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

10. 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

Featured Tech Videos