Delete specific lines from a file

Hi,

I have a file ( all_users.ldif ) of the following format:

cn=orcladmin, cn=Users, dc=maximus,dc=com
cn=PUBLIC, cn=Users, dc=maximus,dc=com
cn=portal,cn=users,dc=maximus,dc=com
cn=portal_admin,cn=users,dc=maximus,dc=com
cn=uddi_publisher,cn=Users,dc=maximus,dc=com
cn=uddi_publisher1,cn=Users,dc=maximus,dc=com
cn=ias_admin,cn=Users,dc=maximus,dc=com
cn=uddi_replicator,cn=Users,dc=maximus,dc=com
cn=HA30759, cn=users,dc=maximus,dc=com
cn=AD23563, cn=users,dc=maximus,dc=com
cn=DM20223, cn=users,dc=maximus,dc=com
cn=SS25332, cn=users,dc=maximus,dc=com
cn=AJ24809, cn=users,dc=maximus,dc=com
cn=SG21380, cn=users,dc=maximus,dc=com
cn=PORTAL30, cn=users,dc=maximus,dc=com
cn=PORTAL30_SSO, cn=users,dc=maximus,dc=com

These are different users from OID. From this file I want to delete a few lines. The criteria is to delete lines for the following users:

orcladmin
PUBLIC
portal
portal_admin
uddi_publisher
uddi_publisher1
ias_admin
uddi_replicator

Any ideas on how I can achieve this please?

assuming users to be deleted are in a file 'users2del.txt':

orcladmin
PUBLIC
portal
portal_admin
uddi_publisher
uddi_publisher1
ias_admin
uddi_replicator
nawk -F'=|,' 'FNR==NR {f1[$0];next} !($2 in f1)' users2del.txt all_users.ldif

Too complicated for me to understand.. new to awk :slight_smile:

It's resulting in a 0 byte all_users.ldif file

I was trying to do it with sed actually

for i in orcladmin PUBLIC portal portal_admin uddi_publisher orcladmin uddi_publisher1 ias_admin uddi_replicator
do
echo "deleting user $i"
sed "/${i}/ d" all_users.ldif > all_users.ldif
done

Interesting this also is resulting in a 0 byte file

Yay!! I got it fixed with my own random logic :slight_smile:

for i in orcladmin PUBLIC portal portal_admin uddi_publisher orcladmin uddi_publisher1 ias_admin uddi_replicator
do
echo "deleting user $i"
sed "/${i}/d" all_users.ldif > all_users_temp.ldif
mv all_users_temp.ldif all_users.ldif
done

I know there must be a more refined way with sed as well... but it's a good start, I guess?

nawk -F'=|,' 'FNR==NR {f1[$0];next} !($2 in f1)' users2del.txt all_users.ldif > all_users_temp.ldif ; mv all_users_temp.ldif all_users.ldif