awk getline problem


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk getline problem
# 8  
Old 12-13-2012
doesn't my awk script produces the correct output based on your sample above?
Is there still an issue?
This User Gave Thanks to vgersh99 For This Post:
# 9  
Old 12-13-2012
another awk suggestion:
Code:
awk -v i=200 '
/>/ {if (length(s)>i)printf h s; c=0; s=""; h=$0"\n" ; next;}
{ c+=length ; s=s $0 "\n";}
END {if (length(s)>i)printf h s}
' infile.fasta

This User Gave Thanks to rdrtx1 For This Post:
# 10  
Old 12-13-2012
Thanks! All worked like charm!
Can I ask what was wrong with my own script? I thought it should work. Actually it did sometime, yet sometime did not!
By the way, I believe the scripts will be used by a lot of "bioinformaticians" for this routine job with DNA sequences!
Thank you all again!

Last edited by yifangt; 12-13-2012 at 04:37 PM..
# 11  
Old 12-13-2012
I couldn't tell what your original script was even trying to do.

getline profoundly doesn't do what what you thought. It reads lines, but doesn't squeeze them together.

Your control logic was also kind of odd. That 'next' guarantees no lines containing > would ever be printed unless you read them manually with getline. And when you didn't see a >, 'getline' ran every single line -- so you were reading double-speed, then throwing half your lines away. Doing a manual getline bypasses your /^>S/ completely, which is the only way any of those lines could have been printed at all.

I can only guess that some of your input had very long lines, and that work only meant "work". Or perhaps you weren't reading the output you thought you were.

Last edited by Corona688; 12-13-2012 at 04:29 PM..
# 12  
Old 12-13-2012
Thanks Corona!
That's the part I was afraid of, which can lead to a totally wrong result! I am trying to catch more details about awk and hope use it correctly.
Thank you again!
# 13  
Old 12-13-2012
Understand that awk has a built-in while loop. This code:

Code:
awk '/asdf/'

amounts to:

Code:
while( (getline) > 0)
{
        if($0 ~ /asdf/) print
}

Putting a getline after that 'if' would mean it wouldn't get checked by the if-statement.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk with if, getline, and another if

Howdy Folks, It seems like it is always awk that confuses the heck out of me and I even have books and examples. I have this line: awk '{if (/clientIP/)(SRV = $NF); if ($2 ~ /BUNDLE-GIM/) getline; if ($2 ~ /r100595/) {print SRV,"BUNDLE-GIM",$2}}' post.txt to parse this text: <api... (4 Replies)
Discussion started by: port43
4 Replies

2. Shell Programming and Scripting

awk getline

Hi, I have an awk script with the following function in it . function cmd( c ) { while( ( c | getline foo) > 0 ){ return foo ; close( c ); } } c =... (4 Replies)
Discussion started by: MetaMan
4 Replies

3. Shell Programming and Scripting

Getline not working in awk

hi, i am trying to parse a file in awk to generate a output to be written in a file depeding upon some condition. below is the code Content of file1 919873741577,9131638459976206,20130715150109,S,919811000214,2A65,405899136999995... (10 Replies)
Discussion started by: siramitsharma
10 Replies

4. Shell Programming and Scripting

awk getline question

hi experts i like to know how to print more line using getline command using awk. with below command i can only see one line (line no:1) however i do have more line as shown below line no:2,line no:3,line no:4 and so forth. how do i get those to show up using the below command. I tried... (7 Replies)
Discussion started by: Jared
7 Replies

5. Shell Programming and Scripting

Some Awk Getline help?

Greetings, I have about 3000 files that I want to search. The first column in all of these 3000 files has a unique serial number on each line. The subsequent columns have lots of data. I have another masterfile with three columns to help me find all the data I need in a moments notice: col 1... (15 Replies)
Discussion started by: jeeplou
15 Replies

6. Shell Programming and Scripting

Using getline in awk

I am using awk and want to use getline from a file like below getline x < file However file consists of two columns and I only want to store $2 Any way I can do this? ---------- Post updated at 06:54 AM ---------- Previous update was at 06:45 AM ---------- Done something like this.... (1 Reply)
Discussion started by: kristinu
1 Replies

7. Shell Programming and Scripting

syntax about getline of awk

i want to use getline to read command output to a var but the command i want to run is composed of a string and a variable,example: echo "" | awk 'BEGIN{myfile="anyfilename"}{"ls -l "myfile | getline a;print a}'and i got a error sh: anyfilename: command not foundit seems awk just ignored the... (4 Replies)
Discussion started by: b33713
4 Replies

8. Shell Programming and Scripting

awk getline

How do you make the getline function return to the original line? The example below should make it clear where I am currently going wrong. Thanks AWK SCRIPT: ------------- awk -F '-' '{ tmpLine = "EMPTY" print "CURRENT LINE :"$0 getline tmpLine print "NEXT LINE :"tmpLine }'... (1 Reply)
Discussion started by: garethsays
1 Replies

9. Shell Programming and Scripting

awk getline help maybe?

hello collegues, I am attempting to use awk to search file1 (serverlist.csv) from each row with file2 (supported.txt). If the is no entry exists in serverlist then output to a file called notsupp.out if there is an entry output to supp.out I can do this with basic shell scripting however... (0 Replies)
Discussion started by: chlawren
0 Replies

10. Shell Programming and Scripting

awk:Problem with getline

$ echo |awk ' BEGIN {"date" | getline current_time;close("date");print "Report printed on " current_time}' Report printed on Thu May 11 14:57:29 METDST 2006 This example works fine but how can i print all the output when is longer... (3 Replies)
Discussion started by: Klashxx
3 Replies
Login or Register to Ask a Question