I suppose you did copy or move or modify your datatochange.txt file in a way or another, because my code does not modifiy this file, we just read it.
By the way, maybe you did a mix : all the sed -f ... command you passed should be in the "change2run" file, and not in the "datatochange.txt" file
By running :
Code:
awk '{F=$1;a[F];e=(F~/sps$/)?" ":z;s=$2" "$3;p=$4;r=$5
print "s/" s e p "/" s e r "/" >> F".sed"
}END{
for(i in a){print "sed -f "i".sed "i " >>"i".new">>"change2run"}
}' datatochange.txt
This will generate all <file>.sed containing all the substitution to perform for each <file> specified in the "datatochange.txt"
This will also generate a "change2run" that contains the command to process all the substitution (by using the <file>.sed) for each <file> and store the result in the corresponding generated <file>.new
This script should be run in a simple shell like :
Code:
sh change2run
So all the command i provided just generate new files, they do not modify, rename, or move your initial files. If your files have changed it is because of some other external actions, but not because of my code.
---------- Post updated at 03:59 PM ---------- Previous update was at 03:44 PM ----------
After every run, you should of course then make some additionnal cleanup like (for all <file> mentionned in your "datatochange.txt") :
I meant : you should of course replace <file> with the names of the files you used in you datatochange.txt file.
You could gather all the steps in a single script which could for example be something like :
Code:
#!/usr/bin/ksh
# Scan the file datatochange.txt AND generate the necessary files
# to perform the corresponding substitutions
awk '{F=$1;a[F];e=(F~/sps$/)?" ":z;s=$2" "$3;p=$4;r=$5
print "s/" s e p "/" s e r "/" >> F".sed"
}END{
for(i in a){print "sed -f "i".sed "i " >>"i".new">>"change2run"}
}' datatochange.txt
# Run the substitutions and store the result in *.new file
ksh change2run
# Rename current file into *.old
# Rename the result *.new with the current file name (only if
# the previous renaming was successful)
# Remove the *.sed files that were used during the substitution
awk '!a[$1]++{print $1}' datatochange.txt | while read i
do
mv "$i" "$i.old" && mv "$i.new" "$i"
rm "$i.sed"
done
# Remove the main script that were generated to process the substitution
rm change2run
Of course all this could be enhanced in many ways...just feel free to improve & adapt it to your own environment & requirements.
Hi All,
I am having below sample data in a file.
I need to find all the line form this file with word ABC and i need to replace the characters at position 120 which is "CO:BOGFDUI"(30chars) in the lines with blank space.
I have tried using grep to find the word with ABC (grep ABC filename),... (3 Replies)
Hi,
I am new to shell scripting. I have a config file where key and value is stored as below. In my shell script, I want to look for Test ID in the config file and replace the value 1 with another value stored in a variable. How would I do that ?
<Config Key="Test ID" Value="1"/>
I... (6 Replies)
Hello Forum.
I have a file called abc.sed with the following commands;
s/1/one/g
s/2/two/g
...
I also have a second file called abc.dat and would like to substitute all occurrences of "1 with one", "2 with two", etc and create a new file called abc_new.dat
sed -f abc.sed abc.dat >... (10 Replies)
Hi All,
I have a XML file which is looks like as below. <<please see the attachment >>
<?xml version="1.0" encoding="UTF-8"?>
<esites>
<esite>
<name>XXX.com</name>
<storeId>10001</storeId>
<module>
... (4 Replies)
Legends,
I have a file /tmp/list.txt
I want to find "/bin/" and replace it with "/log/"
I tried the follwoing but no luck
Sandy: /tmp> perl -pi -e 's/\/bin\/\/log\/' /tmp/list.txt >> /tmp/try
Substitution pattern not terminated at -e line 1.
AND,
Sandy: /tmp> perl -pi -e... (2 Replies)
I've never written scripts (just switched from Ada to C++). I have a book that's over my head and a few examples, other then that I'm floundering. Everything here at work is being done in C Shell. None of the C++ programmers are experienced in shell scripting.
I have a data file with the... (2 Replies)
Is there a way to do a find and replace in a .gz file in a single script ?
I can always unzip, find and replace and then zip it again but would hate to do this everytime.
Thanks !
Vivek (1 Reply)
Hi everyone,
I am new to the world of shell script programming.
I have a file named Fnd1.txt which has the contents as below.
I need to replace the \t with the tab space. Can any one help me
to write a perl scipt for this.
USA45V1\tG\t341029
USAV1T1\tG\t450545
USAREJ1\tG\t572645... (5 Replies)
I build several files by using the cut command to grab select fields(columns) from a really bid csv file. Each file is one column of data. I then put them together using paste command. Here is the code built in tcsh:
cut -d , -f 1 some.csv > 1.csv
cut -d , -f 10 some.csv > 10.csv
paste 1.csv... (2 Replies)