#!/usr/bin/perl -w use strict; my $requestid = 3; my $enddate = 'Aug 13 2010 9:30AM'; #field 9 my $state = 'failed'; #field 10 $requestid ||= 0; #or possibly use the //= operator $enddate ||= "none"; $state ||= "none"; while () { unless (/^$requestid,/) { print; next;} #if (!/^$requestid,/) { print; next;} #same thing if you want chomp; my @fields = split (/,/,$_); $fields[10] = $enddate; $fields[11] = $state; print join(",",@fields), "\n"; } =prints for line 3 ... others are unchanged 3,AB499,none,Somebody.Admin@mysite.com,none,none,1,dbase,none,none,Aug 13 2010 9:30AM,failed =cut __DATA__ 1,AB499,Joe.Bloggs@mysite.com,MY_SERVER_ENV,sales,/opt/backup/MY_SERVER_ENV,sales.data,1,dbase,Apr 25 2008 3:25PM,Apr 25 2008 3:30PM,completed 2,AB499,none,Somebody.Admin@mysite.com,none,none,1,dbase,none,none,none 3,AB499,none,Somebody.Admin@mysite.com,none,none,1,dbase,none,none,none 4,AB499,none,Somebody.Admin@mysite.com,none,none,1,dbase,none,none,none 5,AB499,none,Somebody.Admin@mysite.com,none,none,1,dbase,none,none,none 6,AB499,none,Somebody.Admin@mysite.com,none,none,1,dbase,none,none,none 7,XX777,myserver,Anon.Person@mysite.com,business,/nfs/busback/upload/incident,10,dbase,none,none,none 8,XX777,myserver,Anon.Person@mysite.com,business,/nfs/busback/upload/incident,10,dbase,Aug 13 2010 8:30AM,Aug 13 2010 9:00AM,completed