stack2@domain.com,2009-11-27 01:05:47.893000000,xx2.net,127.0.0.1 overflow@domain2.com,2009-11-27 00:58:29.793000000,xx3.net,255.255.255.0 overflow@domain2.com,2009-11-27 00:58:29.646465785,2x3.net,256.255.255.0 ... sort -u -t, -k1,1 file overflow@domain2.com,2009-11-27 00:58:29.793000000,xx3.net,255.255.255.0 stack2@domain.com,2009-11-27 01:05:47.893000000,xx2.net,127.0.0.1 awk -F"," '!_[$1]++' file 1 01:05:47.893000000 2009-11-27 tack2@domain.com 2 00:58:29.793000000 2009-11-27 overflow@domain2.com 1 grep -v ',col2,' file > file_minus_offending_lines awk -F, '{print $2 "|" $line}' awk -F, '{print $2 "|" $line}' | grep -v ^BAD_VALUE awk -F, '{print $2 "|" $line}' | grep -v ^BAD_VALUE | sed 's/.*|//g' $ cat test.csv overflow@domain2.com,2009-11-27 00:58:29.793000000,xx3.net,255.255.255.0 stack2@domain.com,2009-11-27 01:05:47.893000000,xx2.net,127.0.0.1 overflow@domain2.com,2009-11-27 00:58:29.646465785,2x3.net,256.255.255.0 stack2@domain.com,2009-11-27 01:05:47.893000000,xx2.net,127.0.0.1 stack3@domain.com,2009-11-27 01:05:47.893000000,xx2.net,127.0.0.1 stack4@domain.com,2009-11-27 01:05:47.893000000,xx2.net,127.0.0.1 stack2@domain.com,2009-11-27 01:05:47.893000000,xx2.net,127.0.0.1 $ sort test.csv overflow@domain2.com,2009-11-27 00:58:29.646465785,2x3.net,256.255.255.0 overflow@domain2.com,2009-11-27 00:58:29.793000000,xx3.net,255.255.255.0 stack2@domain.com,2009-11-27 01:05:47.893000000,xx2.net,127.0.0.1 stack2@domain.com,2009-11-27 01:05:47.893000000,xx2.net,127.0.0.1 stack2@domain.com,2009-11-27 01:05:47.893000000,xx2.net,127.0.0.1 stack3@domain.com,2009-11-27 01:05:47.893000000,xx2.net,127.0.0.1 stack4@domain.com,2009-11-27 01:05:47.893000000,xx2.net,127.0.0.1 $ sort test.csv | uniq overflow@domain2.com,2009-11-27 00:58:29.646465785,2x3.net,256.255.255.0 overflow@domain2.com,2009-11-27 00:58:29.793000000,xx3.net,255.255.255.0 stack2@domain.com,2009-11-27 01:05:47.893000000,xx2.net,127.0.0.1 stack3@domain.com,2009-11-27 01:05:47.893000000,xx2.net,127.0.0.1 stack4@domain.com,2009-11-27 01:05:47.893000000,xx2.net,127.0.0.1 $ awk -F, '{ lines[$1] = $0 } END { for (l in lines) print lines[l] }' test.csv stack2@domain.com,2009-11-27 01:05:47.893000000,xx2.net,127.0.0.1 stack4@domain.com,2009-11-27 01:05:47.893000000,xx2.net,127.0.0.1 stack3@domain.com,2009-11-27 01:05:47.893000000,xx2.net,127.0.0.1 overflow@domain2.com,2009-11-27 00:58:29.646465785,2x3.net,256.255.255.0