Hi, i have a problem with a sed command runned in a for cycle...
I have a file named fileX which contains (i have crippled the line to minimal for easy):
Code:
load data dbfoo - TOCHANGE - comment
load data dbboo - TOCHANGE - comment
load data dbzoo - TOCHANGE - comment
...
And a file named fileY which contains:
Code:
value1
value2
value3
...
I don't understand why sed change every occurrence of TOCHANGE in fileX, i have read that sed change the first occurrence and then proceed if switch "g" is omitted...
The portion of the code where i surely have made an error is:
Code:
for TC in `cat fileY`
do
sed s/"TOCHANGE"/"$TC" fileX > results
done
I've thinked that the file results will be like:
Code:
load data dbfoo - value1 - comment
load data dbboo - value2 - comment
load data dbzoo - value3 - comment
...
Because the echo on variable TC show me the values in order...
But instead i have this:
Code:
load data dbfoo - valueX - comment
load data dbboo - valueX - comment
load data dbzoo - valueX - comment
...
Let me guess, your script leaves the last value in the fileY.
You say sed change the first occurrence and then proceed if switch "g" is omitted, this is correct, but for each line. fileX includes TOCHANGE in every line, so for every line sed will change the first occurrence.
I think you can apply sed substitution only for a 1 line range, but I don't know how.
I think an issue is that each iteration will change for filex to results. But, you never in-between copy results back to filex before doing the next step.
So, after your sed, you would need something like
I'm not exactly certain what it is you're trying to do, so hopefully some general advice might be of use:
To change the first instance of "a" to "b" on _every_ line:
Code:
sed 's/a/b/' file
]
To change the first instance of "a" to "b" in a file:
Code:
sed '/a/{s/a/b/;q;}' file
In sed's substitution command, an empty regular expression is equal to the most recent regular expression used, so "s/a/b/" could have been written as "s//b/".
Thx to all, i've tried both sed solution but it doesn't work...
Like kcoder24 said the intent was to change the first occurrence for a single line and pass to next line on every cicle of for statement...
I try to explain myself better, in fileX i have the lines to change and in fileY i have the values to insert sequentially on every line of fileX.
Both fileX and fileY has the same number of lines because the origin of both files is unique.
Then i wish the results may be this:
Code:
line1 of file fileX with string-to-replace substituted by string line1 of fileY
line2 of file fileX with string-to-replace substituted by string line2 of fileY
and so on...
I try to make a good example with some values...
fileY contains:
Code:
goose
mickey
donald
...
fileX contains:
Code:
My name is frank ZORRO and i live in Bilbao
My name is paul ZORRO and i live in Bilbao
My name is john ZORRO and i live in Bilbao
...
The result i wish at last would be:
result contains:
Code:
My name is frank goose and i live in Bilbao
My name is paul mickey and i live in Bilbao
My name is john donald and i live in Bilbao
...
Thx a lot Scrutinizer i have tested your code and is working exacly as i need...
Let me see an awk tutorial and then i try to explain your code, if u find that i have misunderstood someone scold me...
---------- Post updated at 07:40 AM ---------- Previous update was at 06:55 AM ----------
May someone tell me if i have understood the code meaning?
It's important to learn, more than find the solution right?
Thx
Code:
awk '{getline x<f;sub(/ZORRO/,x)}1' f=file1 file2
............................................^___^ Target of awk command
....................................^_____^ Variable defined for awk that's pointing at file1
.................................^ I give up... Hope this "1" means to make sub on the first occurence...
.....................^_________^ replace ZORRO with the value in x variable
......^_________^ Read input line from f where f is the file1 and then put in x variable
....^_____________________________^ Entire program - switches - options parts of the command
.....^__________________________^ Program part that awk executes (code between the graphs)
Dear all,
I want to create a table using a shell script. Hope someone can help.
I created a variable that contains the path for different files.
For all the files I want to do calculations and print it to stdout (or file) as a table.
I tried this code:
paths=`cat $tabdelim_file | awk... (7 Replies)
Hi,
i would like to insert a if-then-else function in to cycle for
--------------
cat test
--------------
# cat test
ALFA
BETA
GAMMA
-----------------------
This is my script:
#!/bin/bash
for i in $(cat test); if ; then
echo "ok"
else (5 Replies)
i have a question how to modify below script to generate the expect result below :
test.sh
#!/bin/bash
for ((i=0; i < 25; i++))
do
echo $1$i
done
current result:
test.sh 20090101
200901010
200901011
200901012
200901013
200901014
200901015
200901016
200901017
200901018 (2 Replies)
Hello,
I have a question:
is there a way to have a "for" cycle done a certain number of times. For example in c++ I can do this:
for (i=o;i<10;i++)
and the cycle will be repeated 10 times.
in UNIX for example I do this:
for i in `cat /etc/host` do done
and the cycle will be repeated... (6 Replies)
hello everybody,
I need help on putting a wildcard match inside an if condition (I'm using korn shell):
if ]
then echo ' '
echo ''$MYSEL' is not a correct option'
echo ' '
else .....
i tried also #if -ne "``" and a lot of combinations of `"' but I didn't find the... (2 Replies)
Hello,
I have files in a dir.
I what to create a FOR cycle that will do this
FOR <condition> do
file=`ls <directory> | tail -1`
echo $file
mv -f $file <another dir>
done
What I want to now is what should I put in the <condition>. The condition I want is that the FOR will execute... (3 Replies)
Hello
I got a cycle in the script which open another scripts.
if
then
action
fi
Scripts action will be running 2 times at the same time.
Inside of action() is insert into the table.
But what I want is that only first script can do insert into table.
So how to do... (2 Replies)