awk runs and produces output but with error


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk runs and produces output but with error
# 1  
Old 08-02-2016
awk runs and produces output but with error

When I run the awk below, I get an error message

Code:
awk -v OFS='\t' '$(NF-1)=="Benign" || ($(NF-2) OFS $(NF-1))=="Likely Benign" {$(NF)=$(NF-2) OFS $(NF-1)} {print $0 }' input
awk: cmd. line:1: (FILENAME=VUS FNR=8) fatal: attempt to access field -1

input
Code:
Chr    Start    End    Ref    Alt    Func.refGene    AAChange.refGene    PopFreqMax    CLINSIG    Classification

The code ran with no error before I added $7 and I also used the below awk to see what NF equals, but am not able to correct the error:

Code:
awk 'NR==1{for(i=1;i<=NF;i++){print "Number of field in terms of NF is--> NF-" NF-i", value is-->" $i}}' file.txt
Number of field in terms of NF is--> NF-9, value is-->Chr
Number of field in terms of NF is--> NF-8, value is-->Start
Number of field in terms of NF is--> NF-7, value is-->End
Number of field in terms of NF is--> NF-6, value is-->Ref
Number of field in terms of NF is--> NF-5, value is-->Alt
Number of field in terms of NF is--> NF-4, value is-->Func.refGene
Number of field in terms of NF is--> NF-3, value is-->AAChange.refGene
Number of field in terms of NF is--> NF-2, value is-->PopFreqMax
Number of field in terms of NF is--> NF-1, value is-->CLINSIG
Number of field in terms of NF is--> NF-0, value is-->Classification

Thank you especially @RavinderSingh13 Smilie
# 2  
Old 08-02-2016
What does the next line of your input file look like?
This User Gave Thanks to Don Cragun For This Post:
# 3  
Old 08-02-2016
Empty line in input file. Try:
Code:
awk -v OFS='\t' 'NF && ($(NF-1)=="Benign" || ($(NF-2) OFS $(NF-1))=="Likely Benign") {$(NF)=$(NF-2) OFS $(NF-1)} {print $0 }' input

This User Gave Thanks to rdrtx1 For This Post:
# 4  
Old 08-02-2016
The below is what the data looks like. Thank you Smilie.

Code:
Chr    Start    End    Ref    Alt    Func.refGene    AAChange.refGene    PopFreqMax    CLINSIG    Classification
chr1    43395635    43395635    C    T    exonic        0.12    Benign    
chr1    43396414    43396414    G    A    exonic        0.14    Benign

# 5  
Old 08-02-2016
Quote:
Originally Posted by cmccabe
The below is what the data looks like. Thank you Smilie.

Code:
Chr    Start    End    Ref    Alt    Func.refGene    AAChange.refGene    PopFreqMax    CLINSIG    Classification
chr1    43395635    43395635    C    T    exonic        0.12    Benign    
chr1    43396414    43396414    G    A    exonic        0.14    Benign

That is strange. From your script, one would expect the error:
Code:
awk: cmd. line:1: (FILENAME=VUS FNR=8) fatal: attempt to access field -1

only if an input line is empty or only contains one field. You should not get that error from your script for any input line with two or more fields.

And, since it complains about line:1, it looks like awk is seeing a short or empty line before your heading line???

Last edited by Don Cragun; 08-02-2016 at 06:36 PM.. Reason: Add final note.
This User Gave Thanks to Don Cragun For This Post:
# 6  
Old 08-03-2016
Quote:
Originally Posted by cmccabe
When I run the awk below, I get an error message
Code:
awk -v OFS='\t' '$(NF-1)=="Benign" || ($(NF-2) OFS $(NF-1))=="Likely Benign" {$(NF)=$(NF-2) OFS $(NF-1)} {print $0 }' input
awk: cmd. line:1: (FILENAME=VUS FNR=8) fatal: attempt to access field -1

input
Code:
Chr    Start    End    Ref    Alt    Func.refGene    AAChange.refGene    PopFreqMax    CLINSIG    Classification

The code ran with no error before I added $7 and I also used the below awk to see what NF equals, but am not able to correct the error:

Code:
awk 'NR==1{for(i=1;i<=NF;i++){print "Number of field in terms of NF is--> NF-" NF-i", value is-->" $i}}' file.txt
Number of field in terms of NF is--> NF-9, value is-->Chr
Number of field in terms of NF is--> NF-8, value is-->Start
Number of field in terms of NF is--> NF-7, value is-->End
Number of field in terms of NF is--> NF-6, value is-->Ref
Number of field in terms of NF is--> NF-5, value is-->Alt
Number of field in terms of NF is--> NF-4, value is-->Func.refGene
Number of field in terms of NF is--> NF-3, value is-->AAChange.refGene
Number of field in terms of NF is--> NF-2, value is-->PopFreqMax
Number of field in terms of NF is--> NF-1, value is-->CLINSIG
Number of field in terms of NF is--> NF-0, value is-->Classification

Thank you especially @RavinderSingh13 Smilie
Hello cmccabe,

Glad that solution helped you. As Don mentioned here before too, there must be an empty line in your Input_file because it is saying FNR==8 so on 8th line it is trying to get value of $(NF-1) which is failing because there is NULL value of NF so it is complaining that attempting to access field -1. As usual please show complete Input_file with expected Output and all the requirements.

Thanks,
R. Singh
This User Gave Thanks to RavinderSingh13 For This Post:
# 7  
Old 08-03-2016
I got the awk to run, there was a hidden space that was found using notepad++. Thank you very much Smilie.
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk runs but output is empty

The awk below runs, however the output file is 0 bytes. It is basically matching input files that are 21 - 259 records to a file of 11,137,660 records. Basically, what it does is use the input files of which there are 4 to search and match in a large 11,000,000 record file and output the... (4 Replies)
Discussion started by: cmccabe
4 Replies

2. Shell Programming and Scripting

Script which telnets to a device, runs commands and prints output to a file

I am connecting to a device using telnet, I want my script to perform certain commands : ie- show device , show inventory..etc and write the output it sees from the terminal to a file. this is what I have got : #!/usr/bin/expect -- set running 1 spawn telnet <ip address> expect ... (1 Reply)
Discussion started by: samantha123
1 Replies

3. Shell Programming and Scripting

Need a shell script to compare two directories and produces the output

Hi, I am using solaris OS 10 and Bash shell.I need a script which will compare the two directories and produces the output. Step 1: In detail say suppoose I have machine one and have a directory dir1. Script should iterate through the directories and subdirectories inside and produce the output... (10 Replies)
Discussion started by: muraliinfy04
10 Replies

4. UNIX for Dummies Questions & Answers

linux sort command produces strange output

cat a .a ba .b bb .c bc sort a .a .b ba bb bc .c NOTE: .a and .b appears before ba and bb, where as .c appears after bc. In general (3 Replies)
Discussion started by: ajb
3 Replies

5. Shell Programming and Scripting

awk command in script gives error while same awk command at prompt runs fine: Why?

Hello all, Here is what my bash script does: sums number columns, saves the tot in new column, outputs if tot >= threshold val: > cat getnon0file.sh #!/bin/bash this="getnon0file.sh" USAGE=$this" InFile="xyz.38" Min="0.05" # awk '{sum=0; for(n=2; n<=NF; n++){sum+=$n};... (4 Replies)
Discussion started by: catalys
4 Replies

6. UNIX for Dummies Questions & Answers

gzip produces different output from the same input

Hi there, I'm puzzled. Compressing the same file (same name, same md5sum) at two different times will produce a different output. I mean the md5sum of the resulting .gz files are different. Does it make any sens to any of you? I'd like some explanations if you know what's going on. Thanks... (4 Replies)
Discussion started by: chebarbudo
4 Replies

7. Shell Programming and Scripting

Script Runs fine but not giving any output

Hi, My script is running with no erros but not giving any output can anyonehelp. #!/bin/ksh . /home/application/bin/application.env OUTFILE=Result.txt PROD_PASSWORD=`${GET_PWD} -f ${PWD_FILE_PATH} -s ${PROD_SERVER} -u ${PROD_USER}` echo "1)To get the book last loaded details " read... (7 Replies)
Discussion started by: jagadish_gaddam
7 Replies

8. Shell Programming and Scripting

command runs, no output

I have a script that searches for specific information from log files. #!/bin/sh sed -n '/*C/,/END/p' /sn/log/OMlog* > crit.out sed -n '/REPT INITIALIZATION/,/err:/p' /sn/log/OMlog* > switchcc.out ./start.awk /sn/log/OMlog* > ARs.out ./end.awk /sn/log/OMlog* > ARe.out cat crit.out... (1 Reply)
Discussion started by: grinds
1 Replies

9. Linux

vgscan produces no output using file descriptors on Oracle Enterprise Linux.

I wrote a simple program which will create a child process to execute a command and the output will be redirected to the file. Please have a look at the following code -> #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #include <fcntl.h> void execute(char **argv) { ... (0 Replies)
Discussion started by: sandiworld
0 Replies
Login or Register to Ask a Question