Skip to main content
1 of 3
terdon
  • 252.7k
  • 69
  • 481
  • 719

Your description doesn't match your output, so I am a bit confused. Based on your description, the expected output should be:

818522;"Joey"; 817399;"Ron"; 817400; 818000;"ODC"; 

You wouldn't print any of the 890021 lines because they are last, so they will never have a different first field than the next line. If this is indeed what you want, you can do this:

$ awk 'BEGIN { FS=OFS=";"} { if($1!=last && prevLine){ print prevLine } { last=$1; prevLine=$0 } }' file 818522;"Joey"; 817399;"Ron"; 817400; 818000;"ODC"; 

If you also want to add an exception for the last bunch of lines, try something like this:

$ awk 'BEGIN { FS=OFS=";"} { if($1!=last && prevLine){ print prevLine; lastPrinted=last } { last=$1; prevLine=$0 } } END{ if($1 != lastPrinted){ print } }' file 818522;"Joey"; 817399;"Ron"; 817400; 818000;"ODC"; 890021;"monica" 
terdon
  • 252.7k
  • 69
  • 481
  • 719