2014-06-17 68 views
0

我有以下數據給出的文本文件,我想遞增uidNumber 9000 9000和所有數據應保持相同。增加與匹配的第一列第二列

輸入文件:

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 

. 

. 

. 

. 

輸出文件:

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 

. 

. 

. 

. 

回答

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

兩個獨立的行動在這裏:

  1. /uidNumber/{$2+=9000}:只有當模式被發現增加第二場 (numeracilly)

  2. 1:始終打印當前行。

+0

謝謝你的快速回復.....它適用於我..... – user2074481

+0

很高興它沒有,你可以標記答案然後@ user2074481 – klashxx

1

如果你的數據在文件 「TESTDATA」,則:

純慶典:

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 

檢查:

diff <(bash incscript.sh) testdata 

打印:

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

而且,可以用Perl過,例如:

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

檢查:

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

打印:

11c11 
< uidNumber: 10001 
--- 
> uidNumber: 1001 
23c23 
< uidNumber: 10002 
--- 
> uidNumber: 1002 
相關問題