awk to add +1 to value based on condition in input


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers awk to add +1 to value based on condition in input
# 1  
Old 05-14-2019
awk to add +1 to value based on condition in input

In the awk below I am trying to add a | that will adjust $2 in the ouput by adding +1 if the original value from file that was used in $3 had a - in it. Line 3 of file is an example of this. In my current awk I just subtract one but I am not sure how to only apply this to those values without a -. In my actual data there may be hundreds of lines but always the same format. Thank you Smilie.


file
Code:
2019 NGS-A Gene and Chromosomal Position List,,,,
Gene Symbol,HGNC ID,Transcript Number,Chromosomal Position/Interval ,Required (Exome and Genome Labs)
VPS13B,HGNC:2183,NM_017890.4,chr8 100493900-100493909,yes
VPS33B,HGNC:12712,NM_018668.4,chr15 91543131,

current
Code:
chr8	100493899	100493909	VPS13B
chr15	91543130	91543131	VPS33B

desired
Code:
chr8	100493900	100493909	VPS13B
chr15	91543130	91543131	VPS33B

awk
Code:
awk -F, 'FNR > 2 {for(i=1;i<=NF;i++){if($i~/^chr/){a=$i}} print a,$1}' file | awk -F'[ :-]' 'NF==3{$4=$3;$3=$2} {$1=$1} 1' OFS='\t' | awk -F'\t' '{print $1,$2-1,$3,$4}' OFS="\t" out

# 2  
Old 05-14-2019
Hi, try so
Code:
awk -F "[, -]" '
!/^VPS/         {next}
($0 ~ "-")      {print $4, $5, $6, $1; next}
                {print $4, ($5-1), $5, $1}
' OFS="\t" file

This User Gave Thanks to nezabudka For This Post:
# 3  
Old 05-14-2019
Hello cmccabe,

Could you please try following.
Code:
awk -F, '/VPS/{num=split($4,array,"[ -]");if(num==3){print array[1],array[2]+1,array[3],$1};if(num==2){print array[1],array[2]-1,array[2],$1}}'   Input_file | column -t

Thanks,
R. Singh
This User Gave Thanks to RavinderSingh13 For This Post:
# 4  
Old 05-15-2019
Close, but the ID -1 Transcript Gene doesn't need to print and even when I add FNR>2 it does. I added [A-Z] as the VPS may be different but it will always be capital letters. Thank you Smilie.

Code:
awk -F "[, -]" '
!/^[A-Z]/         {next}
($0 ~ "-")      {print $4, $5, $6, $1; next}
                {print $4, ($5-1), $5, $1}
' OFS="\t" in

ID	-1	Transcript	Gene
chr8	100493900	100493909	VPS13B
chr15	91543130	91543131	SPS33B

desired
Code:
chr8	100493900	100493909	VPS13B
chr15	91543130	91543131	SPS33B

The same results from your code @RavinderSingh13 .... thank you Smilie.

Last edited by cmccabe; 05-15-2019 at 11:08 AM.. Reason: added details
This User Gave Thanks to cmccabe For This Post:
# 5  
Old 05-15-2019
may be
Code:
!/:/    {next}

or
Code:
!/^[A-Z][A-Z]/    {next}

# 6  
Old 05-15-2019
Like so?

Code:
awk -F '[, -]' '$4~/^chr/{if(!$6) {$6=$5; $5-=1} print $4, $5, $6, $1}' OFS='\t' file

This User Gave Thanks to Scrutinizer For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Add new column based in condition

At begining of column 2 the same block (2000) have 3 lines, in the next block (2336) it have 9 lines and for block (2524) 3 lines. ... (0 Replies)
Discussion started by: jiam912
0 Replies

2. Shell Programming and Scripting

awk to reformat lines based on condition

The awk below uses the tab-delimeted fileand reformats each line based on one of three conditions (rules). The 3 rules are for deletion (lines in blue), snv (line in red), and insertion (lines in green). I have included all possible combinations of lines from my actual data, which is very large.... (0 Replies)
Discussion started by: cmccabe
0 Replies

3. Shell Programming and Scripting

Help with awk color codes based on condition

HI i have two files say test and test1 Test.txt Code: Lun01 2TB 1.99TB 99.6% Lun02 2TB 1.99TB 99.5% Lun03 2TB 1.99TB 99.5% Lun04 2TB 1.55TB 89.6% Code: Test1.txt Lun01 2TB 1.99TB 89.5% Lun02 2TB 1.99TB 99.5% Lun03 2TB 1.99TB 99.5% Requirement is to compare... (6 Replies)
Discussion started by: venkitesh
6 Replies

4. Shell Programming and Scripting

Remove line based on condition in awk

In the following tab-delimited input, I am checking $7 for the keyword intronic. If that keyword is found then $2 is split by the . in each line and if the string after the digits or the +/- is >10, then that line is deleted. This will always be the case for intronic. If $7 is exonic then nothing... (10 Replies)
Discussion started by: cmccabe
10 Replies

5. Shell Programming and Scripting

Help with Awk finding and replacing a field based on a condition

Hi everybody, I'm trying to replace the $98 field with "T" if the last field (108th) is T I've tried awk 'BEGIN{OFS=FS="|"} {if ($108=="T")sub($98,"T"); print}' test.txt but that doesn't do anything also tried awk 'BEGIN{OFS=FS="|"}{ /*T.$/ sub($98,"T")} { print}' test.txt but... (2 Replies)
Discussion started by: jghi123
2 Replies

6. Shell Programming and Scripting

Move input file based on condition

Hello, I have File1 in a directory A, a File2 in a directory B. If the File2 is not empty Then I have to move File1 from directory A to a directory archive Else no action. Is it possible to do this from one command line? Thank you in advance for your answers. Madi (2 Replies)
Discussion started by: AngelMady
2 Replies

7. Shell Programming and Scripting

Change in Input feed based on condition file

Sorry Guys for not being able to explain in one of my earlier post. I am now putting my requirement with the input file and desired output file. In the below input file - Transaction code is at position 31:40. Business code is from position 318:321 TSCM00000005837 ... (7 Replies)
Discussion started by: varunrbs
7 Replies

8. Shell Programming and Scripting

Copy input file based on condition

Hi, I am new to unix shell programming. I want to write a shell script for a functionality existing in mainframe system. I have one file as below as input 123456 &__987 &12yuq abcdef _ referes to blank condition:whenever the input file is having &__ ,it should be replaced... (4 Replies)
Discussion started by: charan0703
4 Replies

9. Shell Programming and Scripting

Awk to print on condition in input file

I need only those records which has $2 equal to "DEF" independent of case (i.e upper or lower) nawk -F"," '$2 ~ //{print $0}' file This returns 3rd record also which i dont want I tried this but this doesnt work as expected. nawk -F"," '$2 == ""{print $0}' file i dont... (3 Replies)
Discussion started by: pinnacle
3 Replies

10. Shell Programming and Scripting

awk script to split a file based on the condition

I have the file with the records like 4234234 US phone 3244234 US cup 2342342 CA phone 8947234 US phone 2389472 CA cup 2348972 US maps 3894234 CA phone I want the records with (US,phone) as record to be in one file, (Us, cup) in another file and (CA,cup) to be in another I mean all... (12 Replies)
Discussion started by: superprogrammer
12 Replies
Login or Register to Ask a Question