Find and replace increament

Dears,

Can you help me with the below concern, I need one liner for this.

Input_file.txt

dn: asdf=yyyyyyyyyyyyy426019001711473,ou=multiSCs,dc=btc
asdf: yyyyyyyyyyyyy426019001711473
DSUnitGroup: 1
objectClass: CUDBMultiServiceConsumer

dn: asdf=yyyyyyyyyyyyy426019001711351,ou=multiSCs,dc=btc
asdf: yyyyyyyyyyyyy426019001711351
DSUnitGroup: 3
objectClass: CUDBMultiServiceConsumer

dn: asdf=yyyyyyyyyyyyy426019001711436,ou=multiSCs,dc=btc
asdf: yyyyyyyyyyyyy426019001711436
DSUnitGroup: 8
objectClass: CUDBMultiServiceConsumer

dn: asdf=yyyyyyyyyyyyy426019001711326,ou=multiSCs,dc=btc
asdf: yyyyyyyyyyyyy426019001711326
DSUnitGroup: 16
objectClass: CUDBMultiServiceConsumer

dn: asdf=yyyyyyyyyyyyy426019001710223,ou=multiSCs,dc=btc
asdf: yyyyyyyyyyyyy426019001710223
DSUnitGroup: 6
objectClass: CUDBMultiServiceConsumer

The output should be like below, the should start from DSUnitGroup: 1 and incremented sequentially till it reach a particular count here let us say DSUnitGroup: 8, and once it is reached again it should start from DSUnitGroup: 1.

Output_file.txt

dn: asdf=yyyyyyyyyyyyy426019001711473,ou=multiSCs,dc=btc
asdf: yyyyyyyyyyyyy426019001711473
DSUnitGroup: 1
objectClass: CUDBMultiServiceConsumer

dn: asdf=yyyyyyyyyyyyy426019001711351,ou=multiSCs,dc=btc
asdf: yyyyyyyyyyyyy426019001711351
DSUnitGroup: 2
objectClass: CUDBMultiServiceConsumer

dn: asdf=yyyyyyyyyyyyy426019001711436,ou=multiSCs,dc=btc
asdf: yyyyyyyyyyyyy426019001711436
DSUnitGroup: 3
objectClass: CUDBMultiServiceConsumer

dn: asdf=yyyyyyyyyyyyy426019001711326,ou=multiSCs,dc=btc
asdf: yyyyyyyyyyyyy426019001711326
DSUnitGroup: 4
objectClass: CUDBMultiServiceConsumer

dn: asdf=yyyyyyyyyyyyy426019001710223,ou=multiSCs,dc=btc
asdf: yyyyyyyyyyyyy426019001710223
DSUnitGroup: 5
objectClass: CUDBMultiServiceConsumer

dn: asdf=yyyyyyyyyyyyy426019001710223,ou=multiSCs,dc=btc
asdf: yyyyyyyyyyyyy426019001710223
DSUnitGroup: 6
objectClass: CUDBMultiServiceConsumer

dn: asdf=yyyyyyyyyyyyy426019001710223,ou=multiSCs,dc=btc
asdf: yyyyyyyyyyyyy426019001710223
DSUnitGroup: 7
objectClass: CUDBMultiServiceConsumer

dn: asdf=yyyyyyyyyyyyy426019001710223,ou=multiSCs,dc=btc
asdf: yyyyyyyyyyyyy426019001710223
DSUnitGroup: 8
objectClass: CUDBMultiServiceConsumer

dn: asdf=yyyyyyyyyyyyy426019001710223,ou=multiSCs,dc=btc
asdf: yyyyyyyyyyyyy426019001710223
DSUnitGroup: 1
objectClass: CUDBMultiServiceConsumer

dn: asdf=yyyyyyyyyyyyy426019001710223,ou=multiSCs,dc=btc
asdf: yyyyyyyyyyyyy426019001710223
DSUnitGroup: 2
objectClass: CUDBMultiServiceConsumer

can you help me with the one liner string. to achieve this.

awk '$1 ~ /DSUnitGroup:/ {$NF=((c++ % count) + 1)} 1' count=8 file
1 Like

@rdrtx1 thank you for the reply brother, can you also help me in describing what this awk attributes are doing I'm not very sound in this.

Like so (assuming you know about the pattern - action pair operation of awk ):

awk '                                   # run awk and open its first parameter, taken as "awk script"
$1 ~ /DSUnitGroup:/                     # if $1 (the first field) matches "DSUnitGroup"
  {$NF=                                 # assign to $NF (the last field) the ---
        (
                (c++                    # --- contents of the (post-incremented, see below) c variable
                 % count                # modulo count variable's contents (8) i.e. 0 - 7
                ) + 1                   # plus 1, i.e. 1 - 8
        )                               # now increment c
  }                                     # end statement for $1 match
1                                       # for 1 = TRUE perform default action (print $0)
'                                       # close awk's first parameter
 count=8 file                           # specify count value and input file