Unix/Linux Go Back    


UNIX for Dummies Questions & Answers This forum is closed for new posts. Please post beginner questions to learn unix and learn linux in this forum UNIX for Beginners Questions & Answers

Replace string and create new file multiple times

UNIX for Dummies Questions & Answers


 
 
Thread Tools Search this Thread Display Modes
    #8  
Old Unix and Linux 05-25-2016
pseudo.seppuku pseudo.seppuku is offline
Registered User
 
Join Date: May 2016
Last Activity: 25 May 2016, 3:46 PM EDT
Posts: 5
Thanks: 3
Thanked 0 Times in 0 Posts
Quote:
Originally Posted by RudiC View Post
Try
Code:
awk '
        {ARR[NR] = $0}
END     {for (i=1; i<=MAX; i++) {if (FN) close (FN)
                                 TCNT = sprintf ("%03d", i)
                                 FN = FILENAME TCNT ".txt" 
                                 for (j=1; j<=NR; j++)  {T = ARR[j]
                                                         gsub (/001/, TCNT, T)
                                                         print T > FN
                                                        }
                                }
        }
' MAX=3 file
cf *.txt
file001.txt:
-file1 001.txt -file2 blah1.txt -outputx x001blah1 -outputy y001blah1
-file1 001.txt -file2 blah2.txt -outputx x001blah2 -outputy y001blah2
-file1 001.txt -file2 blah3.txt -outputx x001blah3 -outputy y001blah3
file002.txt:
-file1 002.txt -file2 blah1.txt -outputx x002blah1 -outputy y002blah1
-file1 002.txt -file2 blah2.txt -outputx x002blah2 -outputy y002blah2
-file1 002.txt -file2 blah3.txt -outputx x002blah3 -outputy y002blah3
file003.txt:
-file1 003.txt -file2 blah1.txt -outputx x003blah1 -outputy y003blah1
-file1 003.txt -file2 blah2.txt -outputx x003blah2 -outputy y003blah2
-file1 003.txt -file2 blah3.txt -outputx x003blah3 -outputy y003blah3

EGADS. This worked beautifully!

One minor question while I try to work out all the syntax: the two sets of files for comparison (what I previously referred to as 001.txt and blah1.txt) actually have the same numbering system - since there are hundreds of them - but with a different letter prefix for each set, i.e., a001..a300.txt and b001..b300.txt. I only want the numbers starting with a to increase without changing b. Where should I specify/add this prefix?

In other words, the actual lines look more like this:


Code:
-file1 a001.txt -file2 b001.txt -outputx xa001b001 -outputy ya001b001
-file1 a001.txt -file2 b002.txt -outputx xa001b002 -outputy ya001b002
-file1 a001.txt -file2 b003.txt -outputx xa001bl003 -outputy ya001b003

As you can see, the current script would change the numbers for a (as intended) but also the corresponding number for b. This wouldn't be difficult to cross-check if I only had a few lines, but with hundreds, it becomes somewhat more tedious to correct manually. Sorry for the confusion! I was trying to keep my first post as simple as possible.


---------- Post updated at 07:01 PM ---------- Previous update was at 06:47 PM ----------

Quote:
Originally Posted by RavinderSingh13 View Post
Hello pseudo.seppuku,

Could you please try following and let me know if this helps, not tested though.

Code:
for file in *.txt; do let "i = i + 1"; awk -vI=$i '{gsub(/001/,"002",$0);VAL=sprintf("%02d",I);print >> FILENAME VAL;}' $file; done

Thanks,
R. Singh
Just tried it. Linux The search and replace bit works perfectly. It only creates a single new file though, called file02. However, it's a little strange because if I delete this file and run the script again, the replacement is called file03 (instead of file02 again). Hope that makes sense.

Last edited by pseudo.seppuku; 05-25-2016 at 02:26 PM..
Sponsored Links
    #9  
Old Unix and Linux 05-25-2016
RavinderSingh13 RavinderSingh13 is online now Forum Advisor  
Registered User
 
Join Date: May 2013
Last Activity: 18 October 2017, 10:44 AM EDT
Location: Chennai
Posts: 2,630
Thanks: 579
Thanked 1,251 Times in 1,126 Posts
Quote:
Originally Posted by pseudo.seppuku View Post
EGADS. This worked beautifully!

One minor question while I try to work out all the syntax: the two sets of files for comparison (what I previously referred to as 001.txt and blah1.txt) actually have the same numbering system - since there are hundreds of them - but with a different letter prefix for each set, i.e., a001..a300.txt and b001..b300.txt. I only want the numbers starting with a to increase without changing b. Where should I specify/add this prefix?

Sorry for the confusion!

---------- Post updated at 07:01 PM ---------- Previous update was at 06:47 PM ----------

Just tried it. Linux The search and replace bit works perfectly. It only creates a single new file though, called file02. However, it's a little strange because if I delete this file and run the script again, the replacement is called file03 (instead of file02 again). Hope that makes sense.
Hello pseudo.seppuku,

That's because you haven't run it as a script and when you ran it as a command, variable named i's value will be there in memory of shell and it will take it from there. When you save this as a script and run this will not happen. As for file names I am still little confuse as you need to show like current_file_name--> new_file_name etc, I hope this helps you.

Thanks,
R. Singh
Sponsored Links
    #10  
Old Unix and Linux 05-25-2016
pseudo.seppuku pseudo.seppuku is offline
Registered User
 
Join Date: May 2016
Last Activity: 25 May 2016, 3:46 PM EDT
Posts: 5
Thanks: 3
Thanked 0 Times in 0 Posts
Sorry, the first comment (regarding prefixes) was referring to RudiC's script.

I only just started fiddling with Linux recently so that's good to know.

However, what I meant about your script was that it only creates a single new file (file001 with string 001 -> file002 with string 002). I need this done a few hundred times, until file300 with string 300.

Last edited by pseudo.seppuku; 05-25-2016 at 02:31 PM..
    #11  
Old Unix and Linux 05-25-2016
Corona688 Corona688 is offline Forum Staff  
Mead Rotor
 
Join Date: Aug 2005
Last Activity: 17 October 2017, 2:51 PM EDT
Location: Saskatchewan
Posts: 22,464
Thanks: 1,139
Thanked 4,259 Times in 3,933 Posts
It generates a filename dynamically, based on the input filename. Or are you saying each input file creates 300 output files?
Sponsored Links
    #12  
Old Unix and Linux 05-25-2016
RudiC RudiC is online now Forum Staff  
Moderator
 
Join Date: Jul 2012
Last Activity: 18 October 2017, 10:48 AM EDT
Location: Aachen, Germany
Posts: 11,474
Thanks: 310
Thanked 3,557 Times in 3,274 Posts
Quote:
Originally Posted by pseudo.seppuku View Post
.
.
.
a different letter prefix for each set, i.e., a001..a300.txt and b001..b300.txt. I only want the numbers starting with a to increase without changing b. Where should I specify/add this prefix?

In other words, the actual lines look more like this:


Code:
-file1 a001.txt -file2 b001.txt -outputx xa001b001 -outputy ya001b001
-file1 a001.txt -file2 b002.txt -outputx xa001b002 -outputy ya001b002
-file1 a001.txt -file2 b003.txt -outputx xa001bl003 -outputy ya001b003

As you can see, the current script would change the numbers for a (as intended) but also the corresponding number for b.
.
.
.
Not sure I get it - do you want the "a" numbers modified in the the file, or work on the file names starting with "a" only? I case of the former, try gsub (/a001/, "a" TCNT, T), in case of the latter, try a*.txt for the file name parameter.
Sponsored Links
 

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Linux More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
Sed replace using same pattern repeating multiple times in a line sol_nov Shell Programming and Scripting 4 10-15-2012 09:01 PM
replace (sed?) a string in file with multiple lines (string) from variable jforce Shell Programming and Scripting 2 09-15-2011 10:10 AM
Find string multiple times, same line jgrosecl UNIX for Dummies Questions & Answers 7 07-11-2011 02:33 PM
replace a string with contents of a txt file containing multiple lines of strings 4dirk1 Shell Programming and Scripting 13 04-26-2011 03:19 AM
replace (sed?) a single line/string in file with multiple lines (string) from another file?? tuathan Shell Programming and Scripting 5 04-20-2011 12:16 AM



All times are GMT -4. The time now is 10:51 AM.