Home > Enterprise >  Appending a count to a code in multiple files and saving the result
Appending a count to a code in multiple files and saving the result

Time:03-08

I'm looking for a bit of help here. I'm a complete newbie!

I need to look in a file for a code matching the pattern A00000_00_A and append a count to it, so the first time it appears it is replaced with A00000_00_A_001, second time A00000_00_A_002 etc. The output needs to be written back to the same file. Each file only contains 1 code, but it appears multiple times.

After some digging I have found-

perl -pi -e 's/Q\d{4,5}'_'\d{2}_./$&.'_'. $A /ge' /users/documents/*.xml

but the issue is the counter does not reset in each file.

That is, the output of the first file is say Q00390_01_A_1 to Q00390_01_A_7, while the second file is Q00391_01_A_8 to Q00391_01_A_10.

What I want is Q00390_01_A_1 to Q00390_01_A_7 in the first file and Q00391_01_A_1 to Q00391_01_A_2 in the second.

Does anyone have any idea on how to edit the above code to make it do that? I'm a total newbie so ideally an edit to what I have would be brilliant. Thanks

CodePudding user response:

cd /users/documents/
for f in *.xml;do
perl -pi -e 's/facs=.(Q|M)\d{4,5}_\d{2}_\w/$&._.sprintf("d",  $A) /ge' $f
done

This matches the string facs= and any character, then "Q" or "M" followed by either four or five digits, then an underscore, then two digits, another underscore, and a word character. The entire match is then concatenated with an underscore and the value of $A zero padded to four digits.

  • Related