I want to reverse some DNA sequences and complement them at the same time. Thus, A changes to T; C to G; T to A and G to C.
example:
infile
outfile:
The Identifier (> XXXXX) should not be modified
This is the code I want to modify:
However, the Ids are not being printed. If I include NR%2, the Ids will also be reverse complemented
I know I can always use perl:
But I am trying to simplify the script so I can explain it better
Can't you apply what you learned from your thread Cut & awk four days ago to this thread? You have exactly the same problem assuming that some elements of a pipeline will only process some of the lines they are fed or that lines thrown away by some element of a pipeline will still magically appear in your output.
You didn't ask any questions about the suggestions you were given there, so we assume that you understand how those suggestions work.
Private message from Xterra
Subject: linux commands "inside" awk
Don
Maybe I did not explain myself clearly. I would like to learn if I can use regular Linux commands such as cut, tr, rev, inside the awk script.
My question about awk and cut was answered using substr -nice alternative though. And I have been working on this
Still, I would like to know if rev | tr can be used within the awk code for this particular example so it can be applied specifically to even rather than all lines on the infile. I do not want to transform the infile into a temporary file, reverse and complement and then rebuilt the file like my example for sort
(thanks once again for that
I have several solutions but now I am trying to learn "easier" ways to write my scripts. Maybe this is not possible and that's why I asked. I have been working on it, I just do not seem to get it to work to satisfy my requirements
Cheers!
Moderator's Comments:
Please do not send private messages asking technical questions. It is forbidden by the forum rules. If you have a technical question about a post in the forums, it is probably of interest to others as well. And, the volunteers working here to try to answer questions don't have time to answer questions individually when answering the question once in the technical forums can help a lot more readers.
Hi Xterra,
You can use system() to run shell commands inside awk, but invoking a shell to invoke rev and tr once for each even numbered line in your file will take at least two orders of magnitude longer to run than building equivalent functionality into your awk script. If we write an awk script to print odd numbered lines and feed even numbered lines through rev and tr:
it is easy to understand and, with an input file containing 10,000 copies of your sample input file, the average of timing 10 runs (with output redirected to a file) is about:
A similar awk script building the rev and tr functionality into an internal function:
produces exactly the same output and takes about:
In other words this awk script processes a little more than 800 lines in the time it take to process 2 lines firing up a pipeline to process the even lines.
The average timing for Aia's perl suggestion was:
For some reason the BSD based sed on OS X produced the wrong output (with leading and trailing X characters on even numbered lines; the lines had been translated but not reversed) without producing any diagnostics when running RudiC's sed script. But an equivalent command (splitting on semicolons into separate sed editing commands):
produced the expected output with average timing output of:
Last edited by Don Cragun; 07-26-2015 at 08:36 PM..
Reason: Properly attribute RudiC for his sed script.
These 2 Users Gave Thanks to Don Cragun For This Post:
Hi All,
I have a String str="Manish". I would like to reverse it.
I know the option to do this in bash is: echo "Manish" | rev
but I have seen an alternate solution somewhere, which states that:
str="Manish" echo $str | awk '{ for(i=length($0);i>=1;i--) printf("%s",substr($0,i,1));... (7 Replies)
Hello guys
How can I use egrep to match word1 but not word2...word1.
What I mean
suppose that I have the following text, and my word1=pizza and word2=eat
I hate to eat pizza because I ma eating it each day
Pizza is good
I like vegetarian and Italian Pizza
eating healthy food is... (7 Replies)
i have created a script that will reverse any given ineter.
#!/bin/ksh
echo "Enter the number"
read n
if
then
a=`expr $n / 10`
b=`expr $n % 10`
c=`expr $b \* 10 + $a`
fi
echo $c
---------------------------------------------------------------------
the problem with this script... (4 Replies)
Hello,
How do i sort a csv file. i should be sorting column1(varchar),column2*(varchar) in ascending and column4 in descending order(numeric datatype).
I tried few combinations of sort, but doesn't seem to be getting the right result.
sort -t "," -k 1 -k 2 -k 4nr file
any help is... (3 Replies)
Hi Everybody,
I want to write a script in unix which will automatically FTP a .txt file from my client machine D: drive(Windows)
That is I want to FTP a file from my PC to UNIX box but this should be done from UNIX box by a shell script. (i.e. I will invoke the script in UNIX and FTP will be... (4 Replies)
when I do
$ ls z*
List of all files begining with 'z'. But what if I want to do a reverse lookup. Just for interest sake ;)
$ ls ztr
should be same as
$ ls ztr*
$ ls zt*
$ ls z* (2 Replies)