Print a field from the previous line


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Print a field from the previous line
# 1  
Old 04-26-2011
Print a field from the previous line

plz help me!!
I have this file ,
Code:
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
Code:
3408   5600
3796   6035
4200   6285
4676   6785
  40   1554
 200   1998
 652   2451
 864   2728
1200   3228

thanks in advance

Last edited by Franklin52; 04-26-2011 at 10:22 AM.. Reason: Please use code tags
# 2  
Old 04-26-2011
Code:
awk '$2{x=$2+500}!$2{$2=x}1' infile

or ... if on SunOS/Solaris
Code:
nawk '$2{x=$2+500}!$2{$2=x}1' infile

Code:
# cat tst
3408 5600
3796 6035
4200 6285
4676 0
40 1554
200 1998
652 2451
864 2728
1200 0

Code:
# nawk '$2{x=$2+500}!$2{$2=x}1' tst
3408 5600
3796 6035
4200 6285
4676 6785
40 1554
200 1998
652 2451
864 2728
1200 3228


Last edited by ctsgnb; 04-26-2011 at 10:26 AM..
# 3  
Old 04-26-2011
sorry its not working and giving me the same output.

---------- Post updated at 08:06 AM ---------- Previous update was at 08:04 AM ----------

I am restriceted in using nawk,but the
Code:
awk '$2{x=$2}!$2{$2=x}1' infile

.

is not working for me

---------- Post updated at 08:06 AM ---------- Previous update was at 08:06 AM ----------

I am restriceted in using nawk,but the
Code:
awk '$2{x=$2}!$2{$2=x}1' infile

is not working for me

Last edited by Franklin52; 04-26-2011 at 10:22 AM.. Reason: Please use code tags
# 4  
Old 04-26-2011
what is your OS ?
did you try with awk nawk and other mawk gawk ?

or also try this if on a SunOS /Solaris plateform

Code:
/usr/xpg4/bin/awk '$2{x=$2+500}!$2{$2=x}1' yourfile

??

Last edited by ctsgnb; 04-26-2011 at 10:24 AM..
# 5  
Old 04-26-2011
Well, its Linux.
The o/p I am looking for is
Code:
3408 5600
3796 6035
4200 6285
4676 6785
40 1554
200 1998
652 2451
864 2728
1200 3228

NOT
Code:
3796 6035
4200 6285
4676 6285
40 1554
200 1998
652 2451
864 2728
1200 2728

Cheers

Last edited by Franklin52; 04-26-2011 at 10:23 AM.. Reason: Please use code tags
# 6  
Old 04-26-2011
Ah ... ooooops ok i missed the +500 ... let me fix my previous posts ...

... ok fixed

Note that you will have the following constraint :

1) Your first line must not have 0 in the field $2
2) If you have many consecutive line with the value 0 (in the column you want to check) they will have the same value (they will not be last $2+500)

if you want it to behave so then :

Code:
awk '$2{x=$2}!$2{x+=500;$2=x}1' infile

see the difference :

Code:
# cat tst
3408 5600
3796 6035
4200 6285
4676 0
4677 0
4678 0
40 1554
200 1998
652 2451
864 2728
1200 0

Code:
# awk '$2{x=$2}!$2{x+=500;$2=x}1' tst
3408 5600
3796 6035
4200 6285
4676 6785
4677 7285
4678 7785
40 1554
200 1998
652 2451
864 2728
1200 3228

Code:
# awk '$2{x=$2}!$2{$2=x+500}1' tst
3408 5600
3796 6035
4200 6285
4676 6785
4677 6785
4678 6785
40 1554
200 1998
652 2451
864 2728
1200 2728


Last edited by ctsgnb; 04-26-2011 at 11:29 AM..
# 7  
Old 04-26-2011
Code:
0      0   3796   6035     151401.65    9486388.65  SY10068003   3444   3083
    0      0   420 6285     151401.65    9486388.65  SY10068003   3444   3083
    0      0   4676 6785     151401.65    9486388.65  SY10068003   3444   3083
    0      0     65   1564     151401.65    9486388.65  SY10068003   3524   3083
    0      0    213   2100     151401.65    9486388.65  SY10068003   3524   3083

---------- Post updated at 08:24 AM ---------- Previous update was at 08:24 AM ----------

Code:
0      0   3796   6035     151401.65    9486388.65  SY10068003   3444   3083
    0      0   420 6285     151401.65    9486388.65  SY10068003   3444   3083
    0      0   4676 6785     151401.65    9486388.65  SY10068003   3444   3083
    0      0     65   1564     151401.65    9486388.65  SY10068003   3524   3083
    0      0    213   2100     151401.65    9486388.65  SY10068003   3524   3083


Last edited by Franklin52; 04-27-2011 at 04:07 AM.. Reason: Please use code tags
Login or Register to Ask a Question

Previous Thread | Next Thread

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

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

3. Shell Programming and Scripting

Command/script to match a field and print the next field of each line in a file.

Hello, I have a text file in the below format: Source Destination State Lag Status CQA02W2K12pl:D:\CAQA ... (10 Replies)
Discussion started by: pocodot
10 Replies

4. Shell Programming and Scripting

Replace first field of a line with previous filed of the line

Hi Everyone, I have a file as below: IM2345638,sherfvf,usha,30 IM384940374,deiufbd,usha,30 IM323763822,cdejdkdnbds,theju,15 0,dhejdncbfd,us,20 IM398202038,dhekjdkdld,tj,30 0,foifsjd,u2,40 The output i need is as below IM2345638,sherfvf,usha,30... (4 Replies)
Discussion started by: usha rao
4 Replies

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

6. Shell Programming and Scripting

Compare Field in Current Line with Field in Previous

Hi Guys I have the following file Essentially, I am trying to find the right awk/sed syntax in order to produce the following 3 distinct files from the file above: Basically, I want to print the lines of the file as long as the second field of the current line is equal to the... (9 Replies)
Discussion started by: moutaye
9 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 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... (9 Replies)
Discussion started by: fabi20
9 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
Login or Register to Ask a Question