2014-06-17 3 views
0

J'ai le fichier texte avec les données données ci-dessous et je veux incrémenter uidNumber par 9000 et toutes les données doivent rester identiques.Incrémenter la deuxième colonne avec la première colonne appariée

fichier d'entrée:

cn: cn=DINAKAR PERI_DPA062,ou=DBS,dc=xyz,dc=com 

objectClass: posixAccount 

objectClass: inetOrgPerson 

objectClass: extensibleObject 

cn: DINAKAR PERI 

uidNumber: 1001 

dn: cn=JOSEPH ABBY_AJA059,ou=TSR,dc=xyz,dc=com 

objectClass: posixAccount 

objectClass: inetOrgPerson 

objectClass: extensibleObject 

cn: JOSEPH ABBY 

uidNumber: 1002 

. 

. 

. 

. 

fichier de sortie:

only uidNumber should be like this 

cn: cn=DINAKAR PERI_DPA062,ou=DBS,dc=xyz,dc=com 

objectClass: posixAccount 

objectClass: inetOrgPerson 

objectClass: extensibleObject 

cn: DINAKAR PERI 

uidNumber: 10001 

dn: cn=JOSEPH ABBY_AJA059,ou=TSR,dc=xyz,dc=com 

objectClass: posixAccount 

objectClass: inetOrgPerson 

objectClass: extensibleObject 

cn: JOSEPH ABBY 

uidNumber: 10002 

. 

. 

. 

. 

Répondre

2
awk '/uidNumber/{$2+=9000}1' infile 

Deux actions distinctes ici:

  1. /uidNumber/{$2+=9000}: Seulement quand modèle se trouve augmentation deuxième champ (numeracilly)

  2. 1: Toujours imprimer la ligne en cours.

+0

Merci pour la réponse rapide ..... il fonctionne pour moi ..... – user2074481

+0

Heureux que ça marche, vous pouvez marquer la réponse puis @ user2074481 – klashxx

1

Si vos données sont dans le fichier "testdata", puis:

Avec bash pur:

RE="uidNumber:" 
while read -r line 
do 
    if [[ $line =~ $RE ]] 
    then 
     read -r key val <<< "$line" 
     val=$(($val + 9000)) 
     echo "$key $val" 
    else 
     echo "$line" 
    fi 
done < testdata 

check:

diff <(bash incscript.sh) testdata 

impressions:

11c11 
< uidNumber: 10001 
--- 
> uidNumber: 1001 
23c23 
< uidNumber: 10002 
--- 
> uidNumber: 1002 

Et, possible avec perl aussi, par exemple:

perl -plE 's/(\d+)/@{[$1+9000]}/c if /uidNumber/' 

check:

diff <(perl -plE 's/(\d+)/@{[$1+9000]}/c if /uidNumber/' < testdata) testdata 

impressions:

11c11 
< uidNumber: 10001 
--- 
> uidNumber: 1001 
23c23 
< uidNumber: 10002 
--- 
> uidNumber: 1002 
Questions connexes