Replace string and create new file multiple times


 
Thread Tools Search this Thread
# 8  
Quote:
Originally Posted by RudiC
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
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. Smilie 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 03:26 PM..
# 9  
Quote:
Originally Posted by pseudo.seppuku
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. Smilie 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
# 10  
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 03:31 PM..
# 11  
It generates a filename dynamically, based on the input filename. Or are you saying each input file creates 300 output files?
# 12  
Quote:
Originally Posted by pseudo.seppuku
.
.
.
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.
 

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

sed command to replace one value which occurs multiple times

Hi, My Input File : "MN.1.2.1.2.14.1.1" := "MN_13_TM_4" ( 000000110110100100110001111110110110101110101001100111110100011010110111001 ) "MOS.1.2.1.2.13.6.2" := "MOS_13_TM_4" ( 000000110110100100110001111110110110101110101001100111110100011010110111001 ) Like above template,I have... (4 Replies)
Discussion started by: Preeti Chandra
4 Replies

2. UNIX for Advanced & Expert Users

Wanted to replace string in an .xlsx file in multiple ZIP Files

Hi , I am having a ZIP file containing an .xlsx file . Now i wanted to replace "GJ" to blank in the .xlsx file . I tried using the below code but not working , Please guide : #!/bin/bash log="/home/srikant/scripts/replacescriptFHO.log" date > $log echo "" >> $log echo initiating for FHO... (1 Reply)
Discussion started by: vipinmaster
1 Replies

3. Shell Programming and Scripting

Sed replace using same pattern repeating multiple times in a line

Sed replace using same pattern repeating multiple times in a line I have text like below in a file: I am trying to replace the above line to following How can I acheive this? I am able to do it if the occurrence is for 1 time: But If I try like below I am getting like this: I have to... (4 Replies)
Discussion started by: sol_nov
4 Replies

4. UNIX for Dummies Questions & Answers

How to check if the same file exists multiple times?

Hi Team , Is there a way I can check to see if the same file say , test.dat exists multiple times in the directory path ? Please help. Thanks Megha (5 Replies)
Discussion started by: megha2525
5 Replies

5. Shell Programming and Scripting

Script to find & replace a multiple lines string across multiple php files and subdirectories

Hey guys. I know pratically 0 about Linux, so could anyone please give me instructions on how to accomplish this ? The distro is RedHat 4.1.2 and i need to find and replace a multiple lines string in several php files across subdirectories. So lets say im at root/dir1/dir2/ , when i execute... (12 Replies)
Discussion started by: spfc_dmt
12 Replies

6. Shell Programming and Scripting

replace (sed?) a string in file with multiple lines (string) from variable

Can someone tell me how I can do this? e.g: a=$(echo -e wert trewt ertert ertert ertert erttert erterte rterter tertertert ert) How do i replace the STRING with $a? I try this: sed -i 's/STRING/'"$a"'/g' filename.ext but this don' t work (2 Replies)
Discussion started by: jforce
2 Replies

7. UNIX for Dummies Questions & Answers

copying same file multiple times with different names

hi, I am copying a file from 1 folder to another in /bin/sh. if the file already exists there, it should get copied as filename1. again if copying next time it shouldget copied as filename2.. , filename3..so on.. The problem is i am able to get uptil filename1.. but how do i know what... (6 Replies)
Discussion started by: blackcat
6 Replies

8. UNIX for Dummies Questions & Answers

Find string multiple times, same line

Hi everybody, Fairly simple question here: I need an awk, sed, or grep command that will find the same string multiple times on one line needs to return all lines which contain .02 twice. I do know the exact number of characters in between the two occurrences of .02 if that helps, all... (7 Replies)
Discussion started by: jgrosecl
7 Replies

9. Shell Programming and Scripting

replace a string with contents of a txt file containing multiple lines of strings

Hello everyone, ive been trying to replace a string "kw01" in an xml file with the contents of a txt file having multiple lines. im a unix newbie and all the sed combinations i tried resulted to being garbled. Below is the contents of the txt file: RAISEDATTIME --------------------... (13 Replies)
Discussion started by: 4dirk1
13 Replies

10. Shell Programming and Scripting

replace (sed?) a single line/string in file with multiple lines (string) from another file??

Can someone tell me how I can do this? e.g: Say file1.txt contains: today is monday the 22 of NOVEMBER 2010 and file2.txt contains: the 11th month of How do i replace the word NOVEMBER with (5 Replies)
Discussion started by: tuathan
5 Replies

Featured Tech Videos