Search and Replace


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Search and Replace
# 1  
Old 04-13-2011
Search and Replace

I am trying to search and replace using two different files with strict search rules.
One file contain some data and the other file contain some numbers as shown below.
DataFile.txt
HTML Code:
>L1_T1
text data...
text data..
>L1_T1
text data...
text data..
>L1_T1
text data...
text data..
.....
.....
>L1_T2
text data...
text data..
>L1_T2
text data...
text data..
...
... upto

>L7_T8
text data...
text data..
>L7_T8
text data...
text data..
data header ranges from L1_T1 .. L1_T8 .. upto L7_T8 (56 headers altogether)

NumberFile.txt
HTML Code:
1
3
4
7
8
75
86
...
... 
4025
4030
4032
I want to replace the headers(L*_T*) of DataFile using the numbers from the NumberFile. However, the condition is each header has a particular range to take the numbers and one number can't be used twice. For Example:
L1_T1 can take those available numbers within the range 1 - 72
L1_T2 can take those available numbers within the range 73 - 144
L1_T3 can take those available numbers within the range 144 - 216
....
L1_T8 can take those available numbers within the range 505 - 576
....
...
L7_T8 can take those available numbers within the range 3961 - 4032
(Increment of 72 for each increasing Header)

Example Output for the above data can be:

HTML Code:
>1
text data...
text data..
>3
text data...
text data..
>7
text data...
text data..
.....
.....
>75
text data...
text data..
>86
text data...
text data..
...
... 

>4030
text data...
text data..
>4032
text data...
text data..
Thanks for any help.
# 2  
Old 04-13-2011
You already have ordered your datafile & number file ?
so in fact you just need to do the replacement step, not the checking rule step , it that correct ?

---------- Post updated at 12:31 PM ---------- Previous update was at 12:23 PM ----------
If so maybe you can try something like
Code:
awk 'NR==FNR{A[++i]=$1}/^>/{sub($1,">"A[++j],$0)}NR!=FNR' numberfile datafile

This code just do the replacement (by line) of the >Lx_Tx found by >(entrie found in the numberfile)
# 3  
Old 04-13-2011
Thanks for your reply.
Both the files are ordered. Thats right.
However, there are more numbers than records in the datafile.
For example, there are three L1_T1 headers, however, for this the numbers are 1,3,4,7 and 8.
So any three numbers can be used as long as they are within the range 1-72.
The code you provided converts:
>L1_T2 to >7
>L1_T2 to >8
which should be
>L1_T2 to >75
>L1_T2 to >86
(range for L1_T2 is 73 - 144)

also
L7_T7 to >4025
L7_T7 to >4030
(range for L7_T7 is 3961 - 4032)
# 4  
Old 04-13-2011
Try this

Code:
awk 'NR==FNR{A[++i]=$1}/^>/{x=$1;gsub("[^0-9]*","",x);L=substr(x,1,1);T=substr(x,2,1);s=((8*L+T-9)*72+1);do{r=0;y=++j;if (s<=A[y] && A[y]<=s+71) r=sub($1,">"A[y],$0)}while(!r&&A[y]<s)}NR!=FNR' numberf dataf

Use nawk instead of awk if you are on a SunOS / Solaris plateform :

Code:
# cat numberf
1
3
4
7
8
75
86
560
2048
4025
4030
4032
# cat dataf
>L1_T1
text data...
text data..
>L1_T1
text data...
text data..
>L1_T1
text data...
text data..
.....
.....
>L1_T2
text data...
text data..
>L1_T2
text data...
text data..
...
... upto

>L7_T8
text data...
text data..
>L7_T8
text data...
text data..
# nawk 'NR==FNR{A[++i]=$1}/^>/{x=$1;gsub("[^0-9]*","",x);L=substr(x,1,1);T=substr(x,2,1);s=((8*L+T-9)*72+1);do{r=0;y=++j;if (s<=A[y] && A[y]<=s+71) r=sub($1,">"A[y],$0)}while(!r&&A[y]<s)}NR!=FNR' numberf dataf
>1
text data...
text data..
>3
text data...
text data..
>4
text data...
text data..
.....
.....
>75
text data...
text data..
>86
text data...
text data..
...
... upto

>4025
text data...
text data..
>4030
text data...
text data..

# 5  
Old 04-14-2011
Gr8.Working Fine.Thanks.
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Nested search in a file and replace the inner search

Hi Team, I am new to unix, please help me in this. I have a file named properties. The content of the file is : ##Mobile props east.url=https://qa.east.corp.com/prop/end west.url=https://qa.west.corp.com/prop/end south.url=https://qa.south.corp.com/prop/end... (2 Replies)
Discussion started by: tolearn
2 Replies

2. Shell Programming and Scripting

Vi search and replace

Hi, I need help with search and replace for the following string using vi .. if ];then to if ];then can this be done in one search and replace or need multiple ? Thanks (3 Replies)
Discussion started by: talashil
3 Replies

3. UNIX for Dummies Questions & Answers

Help with search and replace or search only of / in vi

Hi all, I am editing a config file in vi that has a / on it. At the moment, search and replace looks alright as am able to use a # as a temporary separator, i.e. :,$s#/u01/app#/u02/app#g For doing a search, I have to escape the / do. So if I want to search for /u01/app, I am having to do... (2 Replies)
Discussion started by: newbie_01
2 Replies

4. Shell Programming and Scripting

perl search and replace - search in first line and replance in 2nd line

Dear All, i want to search particular string and want to replance next line value. following is the test file. search string is tmp,??? ,10:1 "???" may contain any 3 character it should remain the same and next line replace with ,10:50 tmp,123 --- if match tmp,??? then... (3 Replies)
Discussion started by: arvindng
3 Replies

5. Shell Programming and Scripting

Search and Replace

Hi!!! I have following xml file with 3 sections. aaa1bbb-ccc default aaa1bbbdd default 0 11 23 * * aaa2bbb-ccc default aaa2bbbdd default 0 11 23 * * aaa3bbb-ccc default aaa3bbbdd default 0 15 23 * * (15 Replies)
Discussion started by: tdev457
15 Replies

6. Shell Programming and Scripting

search and replace in VI

Hi, I want to searcha nd replace a string in file. I am using VI I tried d comm :s/search_string/replacement_string/g but it is giving me " string not found" i know for sure the search_string is there in file. please help me how to do this thanks, Firestar (5 Replies)
Discussion started by: firestar
5 Replies

7. Shell Programming and Scripting

awk - replace number of string length from search and replace for a serialized array

Hello, I really would appreciate some help with a bash script for some string manipulation on an SQL dump: I'd like to be able to rename "sites/WHATEVER/files" to "sites/SOMETHINGELSE/files" within the sql dump. This is quite easy with sed: sed -e... (1 Reply)
Discussion started by: otrotipo
1 Replies

8. Shell Programming and Scripting

Search and replace

I have a script which has several occurences of statement like command: $UCMDPATH/xyz abc I would like to replace the entire line starting from $UCMDPATH with the ls -ltr command eg: Prior to change:: command: $UCMDPATH/xyz abc After change: command: ls -ltr Is there a way to do... (12 Replies)
Discussion started by: jobbyjoseph
12 Replies

9. Shell Programming and Scripting

Perl: Search for string on line then search and replace text

Hi All, I have a file that I need to be able to find a pattern match on a line, search that line for a text pattern, and replace that text. An example of 4 lines in my file is: 1. MatchText_randomNumberOfText moreData ReplaceMe moreData 2. MatchText_randomNumberOfText moreData moreData... (4 Replies)
Discussion started by: Crypto
4 Replies

10. Shell Programming and Scripting

search and replace

hi all, the problem is like this...... i setup a file (Env.txt) which handles all the values. NAME1=xxxxxx, where xxxxx is the value NAME2=xxxxxx GGGGG=uusufu I have 6 files, where i will append the values from env.txt. These files has no specific format. all i want is to append the... (1 Reply)
Discussion started by: tungaw2004
1 Replies
Login or Register to Ask a Question