Change a character based on its position number


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Change a character based on its position number
# 8  
Old 10-09-2012
I have a list of letters that that need to be changed. It's working for the 150th letter but not for 2nd letter for instance. For example, if I change the script (awk line) to change the second letter A to C, it doesn't work. It doesn't give me an error message but returns the text unchanged. I'm using cygwin on a windows machine
Thanks
Amir
# 9  
Old 10-10-2012
try this.....

Just pass parameters..
NUM=position of the string from first line.
Rpl=Check if this letter presents
subs=Replace with this letter

Code:
awk -F "" -v NUM="2" -v Rpl="A" -v subs="C" '{if((max+NF)>=NUM){for(i=1;i<=NF;i++){if((max+i) == NUM && $i == Rpl){$i=subs;max+=NF}}}else{max+=NF}}1' OFS="" file

Hope this helpsSmilie
This User Gave Thanks to pamu For This Post:
# 10  
Old 10-10-2012
When I invoke the script I provided in message #4 in this thread as follows:
Code:
cp mtDNA_GATK_reference_letters.txt in
tester 2 A C > out

then the only difference between files mtDNA_GATK_reference_letters.txt and out is that the first line changed from:
Code:
GATCACAGGTCTATCACCCTATTAACCACTCACGGGAGCTCTCCATGCAT

to:
Code:
GATCCCAGGTCTATCACCCTATTAACCACTCACGGGAGCTCTCCATGCAT

which shows that the 2nd "A" in the file changed from "A" to "C". I'm running this on OS X instead of Cygwin on Windows. But the script I provided should work on any system with a POSIX conforming awk and a shell that processes variable substitution as required by the POSIX standards. (Although you will need to change #!/bin/ksh to specify a path to such a shell on your system.)

I note that the awk scripts provided by pamu use -F "" which works on some systems to treat every input character as a separate field, but produces unspecified results on other systems. I don't know how Cygwin's awk treats that construct. On OS X it prints the diagnostic:
Code:
awk: field separator FS is empty

I agree that the awk script provided by rdrtx1 in message #3 in this thread doesn't do what you requested, but I don't see any reason why the awk script provided by rdrtx1 in message #7 in this thread shouldn't do exactly what you're requesting with obvious changes to the settings for the variables p, r, and l depending on which occurrence of which character you want to change to what.

However, none of our scripts will work if you want the characters acgt to be counted and replaced as equivalent to the characters ACGT, respectively. To make any of these script work, all of your input characters need to be in uppercase. You should be able to fix your input by running the commands:
Code:
tr "acgt" "ACGT" < mtDNA_GATK_reference_letters.txt > tmpfile
mv tmpfile mtDNA_GATK_reference_letters.txt

We could also all change our scripts to work with mixed case input, but I don't see any reason to do that given your specified requirements.
This User Gave Thanks to Don Cragun For This Post:
# 11  
Old 10-17-2012
Thanks you all guys. Pamu command line worked!
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Count specific character of a file in each line and delete this character in a specific position

I will appreciate if you help me here in this script in Solaris Enviroment. Scenario: i have 2 files : 1) /tmp/TRANSACTIONS_DAILY_20180730.txt: 201807300000000004 201807300000000005 201807300000000006 201807300000000007 201807300000000008 2)... (10 Replies)
Discussion started by: teokon90
10 Replies

2. Shell Programming and Scripting

Search for a string at a particular position and replace with blank based on position

Hi, I have a file with multiple lines(fixed width dat file). I want to search for '02' in the positions 45-46 and if available, in that lines, I need to replace value in position 359 with blank. As I am new to unix, I am not able to figure out how to do this. Can you please help me to achieve... (9 Replies)
Discussion started by: Pradhikshan
9 Replies

3. Shell Programming and Scripting

Splitting based on occurence of a Character at fixed position

I have a requirement where i need to split a file based on occurence of a character which is present at a fixed position. Description is as below: 1. The file will be more than 1 Lakh records. 2. Each line will be of fixed length of 987 characters. 3. At position 28 in each line either 'C' or... (9 Replies)
Discussion started by: Neelkanth
9 Replies

4. Shell Programming and Scripting

Replacing a character with a number based on lines

Hi, I am in need of help for the two things which is to be done. First, I have a file that has around four columns. The first column is filled with letter "A". There are around 400 lines in the files as shown below. A 1 5.2 3.2 A 2 0.2 4.5 A 1 2.2 2.2 A 5 2.1 ... (2 Replies)
Discussion started by: begin_shell
2 Replies

5. Shell Programming and Scripting

Find character and Replace character for given position

Hi, i want find the character '-' in a file from position 284-298, if it occurs i need to replace it with 'O ' for the position in the file. How to do that using SED command. thanks in advance, Sara (9 Replies)
Discussion started by: Sara183
9 Replies

6. Linux

Linux script to remove a character in a file based on position.

Greetings, We have a requirement where we need to loop in a fixed width file in linux and remove a character based on a position for every record. It would highly appreciate if someone can help to automate this. Appreciate your time and help! Regards (3 Replies)
Discussion started by: mailme0205
3 Replies

7. Shell Programming and Scripting

Cut multiple data based on character position

How to extract multiple data based on character position. I need to fetch from 7-9 and 22-26 and there is no delimiter for 22-26 since it is part of the column. The file may have more than 1000 character long.I managed to pull any one but not both for example test data 12345 zxc vbnmlk... (1 Reply)
Discussion started by: zooby
1 Replies

8. Shell Programming and Scripting

Change Position of word character

Hi, I have following format in file aaa with content below, and would like to seek help from forumer about how to change and swap the position on 2nd field. 5874957|901125| 95874960|650614| 95874966|870308| 901125 to be changed as 25-11-1990 for eg Can someone help please ?? :) ... (6 Replies)
Discussion started by: cedrichiu
6 Replies

9. Shell Programming and Scripting

Sorting a flat file based on multiple colums(using character position)

Hi, I have an urgent task here. I am required to sort a flat file based on multiple columns which are based on the character position in that line. I am restricted to use the character position instead of the space and sort +1 +2 etc to do the sorting. I understand that there is a previous... (8 Replies)
Discussion started by: cucubird
8 Replies

10. UNIX for Dummies Questions & Answers

Character position

Hi , I am required to view the fixed postion file very often . I am looking for the utility like this if the file has a one or multile line abcdefghijklmnopqr Utility should make my file look like this 12345678910111213141516-------------------------- abcdefghijk l m n o p q r ... (4 Replies)
Discussion started by: akrathi
4 Replies
Login or Register to Ask a Question