Replace group of similar text in string from nth position with one string else increment the value by +1 The 2019 Stack Overflow Developer Survey Results Are Inintroduce line break at the same position based on another fileextract certain string, search and replace or keep a longer string contain the extracted valueHow can I delete everything between two markers in a file?UNIX command for replacing within delimiter based on position of the delimiterHow to extract XML data from logs using Unix shell script?Extract part of the logs to other filelog processing/entry deletion, multi-pipe (grep sed grep), log traversed twice. can this solution be improved?sed or awk for formattingText file: find string, save string field to var, find 2nd string, replace field with var, repeat to endReplace text in lines in a file with increments

What tool would a Roman-age civilization have for the breaking of silver and other metals into dust?

Did Scotland spend $250,000 for the slogan "Welcome to Scotland"?

How to manage monthly salary

Pokemon Turn Based battle (Python)

Can you compress metal and what would be the consequences?

Loose spokes after only a few rides

Right tool to dig six foot holes?

Earliest use of the term "Galois extension"?

Why do we hear so much about the Trump administration deciding to impose and then remove tariffs?

Do these rules for Critical Successes and Critical Failures seem Fair?

Is there a symbol for a right arrow with a square in the middle?

Does a dangling wire really electrocute me if I'm standing in water?

Aging parents with no investments

Apparent duplicates between Haynes service instructions and MOT

Where to refill my bottle in India?

Lightning Grid - Columns and Rows?

Falsification in Math vs Science

Who coined the term "madman theory"?

Which Sci-Fi work first showed weapon of galactic-scale mass destruction?

Is "plugging out" electronic devices an American expression?

Delete all lines which don't have n characters before delimiter

Are there any other methods to apply to solving simultaneous equations?

What is the closest word meaning "respect for time / mindful"

Did Section 31 appear in Star Trek: The Next Generation?



Replace group of similar text in string from nth position with one string else increment the value by +1



The 2019 Stack Overflow Developer Survey Results Are Inintroduce line break at the same position based on another fileextract certain string, search and replace or keep a longer string contain the extracted valueHow can I delete everything between two markers in a file?UNIX command for replacing within delimiter based on position of the delimiterHow to extract XML data from logs using Unix shell script?Extract part of the logs to other filelog processing/entry deletion, multi-pipe (grep sed grep), log traversed twice. can this solution be improved?sed or awk for formattingText file: find string, save string field to var, find 2nd string, replace field with var, repeat to endReplace text in lines in a file with increments



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








0















I have a text file with following lines for example.



Input



DD0TRANSID000019021210504250003379433005533665506656000008587201902070168304000.0AK 0000L00000.00 N 01683016832019021220190212N0000.001683065570067.000000.00000.0000000000000NAcknowledgment 
DD0TRANSID000019021210504250003379433005535567606656000008587201902085381804000.0FC 0000L00000.00 N 53818538182019021220190212N0000.053818065570067.000000.00000.0000000000000NFirst Contact
DD0TRANSID000019021210510360003379433005535568006656000008587201902085381804000.0SR 0000L00000.00 N 53818538182019021220190212N0000.0
CC0TRANSID000019021210510360003379433005535568006656000008587201902085381804000.0SR 0000L00000.00 N 53818538182019021220190212N0000.0


My requirement is
If the line begins with "D" then replace string starting from 14th position to 27th Position with D00000X (X being a number with left padding)



If I come across the same value of string between 14th and 27th Position, that I encountered before in the file, I should replace with D00000X, else with D00000X+1



Output



DD0TRANSID00001902121D000006003379433005533665506656000008587201902070168304000.0AK 0000L00000.00 N 01683016832019021220190212N0000.001683065570067.000000.00000.0000000000000NAcknowledgment 
DD0TRANSID00001902121D000006003379433005535567606656000008587201902085381804000.0FC 0000L00000.00 N 53818538182019021220190212N0000.053818065570067.000000.00000.0000000000000NFirst Contact
DD0TRANSID00001902121D000007003379433005535568006656000008587201902085381804000.0SR 0000L00000.00 N 53818538182019021220190212N0000.0
CC0TRANSID000019021210510360003379433005535568006656000008587201902085381804000.0SR 0000L00000.00 N 53818538182019021220190212N0000.0









share|improve this question









New contributor




Rohit Prasad is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.















  • 1





    Are you sure the replacement happens at position 14? The output doesn't seem right - I see the change at position 21 (or 22 if 1-based).

    – choroba
    2 days ago











  • Is'nt it the same question

    – ctac_
    2 days ago












  • No, it isnt the same question. I need to repeat the replaced string, every time I encounter a duplicate string(string between 14-21 position) else keep incrementing.

    – Rohit Prasad
    2 days ago

















0















I have a text file with following lines for example.



Input



DD0TRANSID000019021210504250003379433005533665506656000008587201902070168304000.0AK 0000L00000.00 N 01683016832019021220190212N0000.001683065570067.000000.00000.0000000000000NAcknowledgment 
DD0TRANSID000019021210504250003379433005535567606656000008587201902085381804000.0FC 0000L00000.00 N 53818538182019021220190212N0000.053818065570067.000000.00000.0000000000000NFirst Contact
DD0TRANSID000019021210510360003379433005535568006656000008587201902085381804000.0SR 0000L00000.00 N 53818538182019021220190212N0000.0
CC0TRANSID000019021210510360003379433005535568006656000008587201902085381804000.0SR 0000L00000.00 N 53818538182019021220190212N0000.0


My requirement is
If the line begins with "D" then replace string starting from 14th position to 27th Position with D00000X (X being a number with left padding)



If I come across the same value of string between 14th and 27th Position, that I encountered before in the file, I should replace with D00000X, else with D00000X+1



Output



DD0TRANSID00001902121D000006003379433005533665506656000008587201902070168304000.0AK 0000L00000.00 N 01683016832019021220190212N0000.001683065570067.000000.00000.0000000000000NAcknowledgment 
DD0TRANSID00001902121D000006003379433005535567606656000008587201902085381804000.0FC 0000L00000.00 N 53818538182019021220190212N0000.053818065570067.000000.00000.0000000000000NFirst Contact
DD0TRANSID00001902121D000007003379433005535568006656000008587201902085381804000.0SR 0000L00000.00 N 53818538182019021220190212N0000.0
CC0TRANSID000019021210510360003379433005535568006656000008587201902085381804000.0SR 0000L00000.00 N 53818538182019021220190212N0000.0









share|improve this question









New contributor




Rohit Prasad is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.















  • 1





    Are you sure the replacement happens at position 14? The output doesn't seem right - I see the change at position 21 (or 22 if 1-based).

    – choroba
    2 days ago











  • Is'nt it the same question

    – ctac_
    2 days ago












  • No, it isnt the same question. I need to repeat the replaced string, every time I encounter a duplicate string(string between 14-21 position) else keep incrementing.

    – Rohit Prasad
    2 days ago













0












0








0








I have a text file with following lines for example.



Input



DD0TRANSID000019021210504250003379433005533665506656000008587201902070168304000.0AK 0000L00000.00 N 01683016832019021220190212N0000.001683065570067.000000.00000.0000000000000NAcknowledgment 
DD0TRANSID000019021210504250003379433005535567606656000008587201902085381804000.0FC 0000L00000.00 N 53818538182019021220190212N0000.053818065570067.000000.00000.0000000000000NFirst Contact
DD0TRANSID000019021210510360003379433005535568006656000008587201902085381804000.0SR 0000L00000.00 N 53818538182019021220190212N0000.0
CC0TRANSID000019021210510360003379433005535568006656000008587201902085381804000.0SR 0000L00000.00 N 53818538182019021220190212N0000.0


My requirement is
If the line begins with "D" then replace string starting from 14th position to 27th Position with D00000X (X being a number with left padding)



If I come across the same value of string between 14th and 27th Position, that I encountered before in the file, I should replace with D00000X, else with D00000X+1



Output



DD0TRANSID00001902121D000006003379433005533665506656000008587201902070168304000.0AK 0000L00000.00 N 01683016832019021220190212N0000.001683065570067.000000.00000.0000000000000NAcknowledgment 
DD0TRANSID00001902121D000006003379433005535567606656000008587201902085381804000.0FC 0000L00000.00 N 53818538182019021220190212N0000.053818065570067.000000.00000.0000000000000NFirst Contact
DD0TRANSID00001902121D000007003379433005535568006656000008587201902085381804000.0SR 0000L00000.00 N 53818538182019021220190212N0000.0
CC0TRANSID000019021210510360003379433005535568006656000008587201902085381804000.0SR 0000L00000.00 N 53818538182019021220190212N0000.0









share|improve this question









New contributor




Rohit Prasad is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












I have a text file with following lines for example.



Input



DD0TRANSID000019021210504250003379433005533665506656000008587201902070168304000.0AK 0000L00000.00 N 01683016832019021220190212N0000.001683065570067.000000.00000.0000000000000NAcknowledgment 
DD0TRANSID000019021210504250003379433005535567606656000008587201902085381804000.0FC 0000L00000.00 N 53818538182019021220190212N0000.053818065570067.000000.00000.0000000000000NFirst Contact
DD0TRANSID000019021210510360003379433005535568006656000008587201902085381804000.0SR 0000L00000.00 N 53818538182019021220190212N0000.0
CC0TRANSID000019021210510360003379433005535568006656000008587201902085381804000.0SR 0000L00000.00 N 53818538182019021220190212N0000.0


My requirement is
If the line begins with "D" then replace string starting from 14th position to 27th Position with D00000X (X being a number with left padding)



If I come across the same value of string between 14th and 27th Position, that I encountered before in the file, I should replace with D00000X, else with D00000X+1



Output



DD0TRANSID00001902121D000006003379433005533665506656000008587201902070168304000.0AK 0000L00000.00 N 01683016832019021220190212N0000.001683065570067.000000.00000.0000000000000NAcknowledgment 
DD0TRANSID00001902121D000006003379433005535567606656000008587201902085381804000.0FC 0000L00000.00 N 53818538182019021220190212N0000.053818065570067.000000.00000.0000000000000NFirst Contact
DD0TRANSID00001902121D000007003379433005535568006656000008587201902085381804000.0SR 0000L00000.00 N 53818538182019021220190212N0000.0
CC0TRANSID000019021210510360003379433005535568006656000008587201902085381804000.0SR 0000L00000.00 N 53818538182019021220190212N0000.0






awk sed perl






share|improve this question









New contributor




Rohit Prasad is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




Rohit Prasad is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited 2 days ago







Rohit Prasad













New contributor




Rohit Prasad is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 2 days ago









Rohit PrasadRohit Prasad

11




11




New contributor




Rohit Prasad is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





Rohit Prasad is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






Rohit Prasad is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







  • 1





    Are you sure the replacement happens at position 14? The output doesn't seem right - I see the change at position 21 (or 22 if 1-based).

    – choroba
    2 days ago











  • Is'nt it the same question

    – ctac_
    2 days ago












  • No, it isnt the same question. I need to repeat the replaced string, every time I encounter a duplicate string(string between 14-21 position) else keep incrementing.

    – Rohit Prasad
    2 days ago












  • 1





    Are you sure the replacement happens at position 14? The output doesn't seem right - I see the change at position 21 (or 22 if 1-based).

    – choroba
    2 days ago











  • Is'nt it the same question

    – ctac_
    2 days ago












  • No, it isnt the same question. I need to repeat the replaced string, every time I encounter a duplicate string(string between 14-21 position) else keep incrementing.

    – Rohit Prasad
    2 days ago







1




1





Are you sure the replacement happens at position 14? The output doesn't seem right - I see the change at position 21 (or 22 if 1-based).

– choroba
2 days ago





Are you sure the replacement happens at position 14? The output doesn't seem right - I see the change at position 21 (or 22 if 1-based).

– choroba
2 days ago













Is'nt it the same question

– ctac_
2 days ago






Is'nt it the same question

– ctac_
2 days ago














No, it isnt the same question. I need to repeat the replaced string, every time I encounter a duplicate string(string between 14-21 position) else keep incrementing.

– Rohit Prasad
2 days ago





No, it isnt the same question. I need to repeat the replaced string, every time I encounter a duplicate string(string between 14-21 position) else keep incrementing.

– Rohit Prasad
2 days ago










1 Answer
1






active

oldest

votes


















0














Assuming that these are date/time stamps and increment in sequence then



a=($(grep -Po "(?<=^D.13).13" testfile | uniq))
for ((i=0; i<$#a[@]; i+=1)); do
s=$a[$i]
sed -E -i "s/(D.13)$s/1$s:0:7D$(printf '%06d' $((i+1)))/g" testfile
done


If a stamp repeats further down the file it gets a new counter increment. If you don't want that then the uniq needs to be sort | uniq which will apply the same counter to the same stamp throughout the file.



BTW, looks like you removed the 0 at position 28 in your example.






share|improve this answer























    Your Answer








    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "106"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );






    Rohit Prasad is a new contributor. Be nice, and check out our Code of Conduct.









    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f511241%2freplace-group-of-similar-text-in-string-from-nth-position-with-one-string-else-i%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    Assuming that these are date/time stamps and increment in sequence then



    a=($(grep -Po "(?<=^D.13).13" testfile | uniq))
    for ((i=0; i<$#a[@]; i+=1)); do
    s=$a[$i]
    sed -E -i "s/(D.13)$s/1$s:0:7D$(printf '%06d' $((i+1)))/g" testfile
    done


    If a stamp repeats further down the file it gets a new counter increment. If you don't want that then the uniq needs to be sort | uniq which will apply the same counter to the same stamp throughout the file.



    BTW, looks like you removed the 0 at position 28 in your example.






    share|improve this answer



























      0














      Assuming that these are date/time stamps and increment in sequence then



      a=($(grep -Po "(?<=^D.13).13" testfile | uniq))
      for ((i=0; i<$#a[@]; i+=1)); do
      s=$a[$i]
      sed -E -i "s/(D.13)$s/1$s:0:7D$(printf '%06d' $((i+1)))/g" testfile
      done


      If a stamp repeats further down the file it gets a new counter increment. If you don't want that then the uniq needs to be sort | uniq which will apply the same counter to the same stamp throughout the file.



      BTW, looks like you removed the 0 at position 28 in your example.






      share|improve this answer

























        0












        0








        0







        Assuming that these are date/time stamps and increment in sequence then



        a=($(grep -Po "(?<=^D.13).13" testfile | uniq))
        for ((i=0; i<$#a[@]; i+=1)); do
        s=$a[$i]
        sed -E -i "s/(D.13)$s/1$s:0:7D$(printf '%06d' $((i+1)))/g" testfile
        done


        If a stamp repeats further down the file it gets a new counter increment. If you don't want that then the uniq needs to be sort | uniq which will apply the same counter to the same stamp throughout the file.



        BTW, looks like you removed the 0 at position 28 in your example.






        share|improve this answer













        Assuming that these are date/time stamps and increment in sequence then



        a=($(grep -Po "(?<=^D.13).13" testfile | uniq))
        for ((i=0; i<$#a[@]; i+=1)); do
        s=$a[$i]
        sed -E -i "s/(D.13)$s/1$s:0:7D$(printf '%06d' $((i+1)))/g" testfile
        done


        If a stamp repeats further down the file it gets a new counter increment. If you don't want that then the uniq needs to be sort | uniq which will apply the same counter to the same stamp throughout the file.



        BTW, looks like you removed the 0 at position 28 in your example.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered 2 days ago









        bu5hmanbu5hman

        1,356415




        1,356415




















            Rohit Prasad is a new contributor. Be nice, and check out our Code of Conduct.









            draft saved

            draft discarded


















            Rohit Prasad is a new contributor. Be nice, and check out our Code of Conduct.












            Rohit Prasad is a new contributor. Be nice, and check out our Code of Conduct.











            Rohit Prasad is a new contributor. Be nice, and check out our Code of Conduct.














            Thanks for contributing an answer to Unix & Linux Stack Exchange!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f511241%2freplace-group-of-similar-text-in-string-from-nth-position-with-one-string-else-i%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            -awk, perl, sed

            Popular posts from this blog

            Frič See also Navigation menuinternal link

            Identify plant with long narrow paired leaves and reddish stems Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?What is this plant with long sharp leaves? Is it a weed?What is this 3ft high, stalky plant, with mid sized narrow leaves?What is this young shrub with opposite ovate, crenate leaves and reddish stems?What is this plant with large broad serrated leaves?Identify this upright branching weed with long leaves and reddish stemsPlease help me identify this bulbous plant with long, broad leaves and white flowersWhat is this small annual with narrow gray/green leaves and rust colored daisy-type flowers?What is this chilli plant?Does anyone know what type of chilli plant this is?Help identify this plant

            fontconfig warning: “/etc/fonts/fonts.conf”, line 100: unknown “element blank” The 2019 Stack Overflow Developer Survey Results Are In“tar: unrecognized option --warning” during 'apt-get install'How to fix Fontconfig errorHow do I figure out which font file is chosen for a system generic font alias?Why are some apt-get-installed fonts being ignored by fc-list, xfontsel, etc?Reload settings in /etc/fonts/conf.dTaking 30 seconds longer to boot after upgrade from jessie to stretchHow to match multiple font names with a single <match> element?Adding a custom font to fontconfigRemoving fonts from fontconfig <match> resultsBroken fonts after upgrading Firefox ESR to latest Firefox