Awk: printing column using for loop


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Awk: printing column using for loop
# 1  
Old 01-16-2018
Awk: printing column using for loop

Hello:

I've input data:

Input data
Code:
--- 3:60069:C:T 60069 C T 1 0 0 1 0 0 1 0 0 1 0 0 1
--- 3:60079:A:G 60079 A G 1 0 0 0.988 0.012 0 1 0 0 1 0 0 1
--- rs186476240:60157:G:A 60157 G A 1 0 0 1 0 0 1 0 0 1 0 0 1

I edit/make first few columns before numbers (6th column) and want to print data as they are. Numbers start from 6th colimn (zero-one)

Code:
  awk '{out=""; for(i=6;i<=NF;i++){out=$out" "$i}; print 3,3":"$3":"$4":"$5,$3,$4,$5,$out}' pot.txt

wrong output:

Code:
3 3:60069:C:T 60069 C T --- 3:60069:C:T 60069 C T 1 0 0 1 0 0 1 0 0 1 0 0 1
3 3:60079:A:G 60079 A G --- 3:60079:A:G 60079 A G 1 0 0 0.988 0.012 0 1 0 0 1 0 0 1
3 3:60157:G:A 60157 G A --- rs186476240:60157:G:A 60157 G A 1 0 0 1 0 0 1 0 0 1 0 0 1
3 3:60189:A:G 60189 A G --- 3:60189:A:G 60189 A G 1 0 0 1 0 0 1 0 0 1 0 0 1
3 3:60197:G:A 60197 G A --- rs115479960:60197:G:A 60197 G A 1 0 0 1 0 0 1 0 0 1 0 0 1
3 3:60201:T:C 60201 T C --- 3:60201:T:C 60201 T C 1 0 0 1 0 0 1 0 0 1 0 0 1
3 3:60202:C:G 60202 C G --- rs28729284:60202:C:G 60202 C G 1 0 0 1 0 0 1 0 0 1 0 0 1
3 3:60322:G:A 60322 G A --- 3:60322:G:A 60322 G A 1 0 0 1 0 0 1 0 0 1 0 0 1
3 3:60337:G:A 60337 G A --- rs116791090:60337:G:A 60337 G A 1 0 0 1 0 0 1 0 0 1 0 0 1
3 3:60342:A:<CN0> 60342 A <CN0> --- 3:60342:A:<CN0>:0 60342 A <CN0> 1 0 0 1 0 0 1 0 0 1 0 0 1

Correct output needed:
Code:
3 3:60069:C:T 60069 C T 1 0 0 1 0 0 1 0 0 1 0 0 1
3 3:60079:A:G 60079 A G 1 0 0 0.988 0.012 0 1 0 0 1 0 0 1
3 3:60157:G:A 60157 G A 1 0 0 1 0 0 1 0 0 1 0 0 1
3 3:60189:A:G 60189 A G 1 0 0 1 0 0 1 0 0 1 0 0 1
3 3:60197:G:A 60197 G A 1 0 0 1 0 0 1 0 0 1 0 0 1
3 3:60201:T:C 60201 T C 1 0 0 1 0 0 1 0 0 1 0 0 1
3 3:60202:C:G 60202 C G 1 0 0 1 0 0 1 0 0 1 0 0 1
3 3:60322:G:A 60322 G A 1 0 0 1 0 0 1 0 0 1
3 3:60337:G:A 60337 G A 1 0 0 1 0 0 1 0 0 1 0 0 1
3 3:60342:A:<CN0> 60342 A <CN0> 1 0 0 1 0 0 1 0 0 1 0 0 1

Even if I start from i=7, I get input column repeated in the output.

Where's my code going wrong?
# 2  
Old 01-16-2018
If you
Quote:
Originally Posted by genome
. . .
print 3,3":"$3":"$4":"$5,$3,$4,$5
. . .
fields twice you shouldn't be surprised them showing up twice in the output. Not understanding what you REALLY want, from your sparse spec and non-matching input - output files, how about
Code:
awk '{$1 = 3}1' file
3 3:60069:C:T 60069 C T 1 0 0 1 0 0 1 0 0 1 0 0 1
3 3:60079:A:G 60079 A G 1 0 0 0.988 0.012 0 1 0 0 1 0 0 1
3 rs186476240:60157:G:A 60157 G A 1 0 0 1 0 0 1 0 0 1 0 0 1

# 3  
Old 01-16-2018
Quote:
Originally Posted by genome
Where's my code going wrong?
$out in awk takes the value of variable out converts to integer and returns the value of that field#.

Remove $ like this:

Code:
awk '{out=""; for(i=6;i<=NF;i++){out=out" "$i}; print 3,3":"$3":"$4":"$5,$3,$4,$5,out}' pot.txt


Last edited by Chubler_XL; 01-16-2018 at 08:15 PM..
# 4  
Old 01-16-2018
Hi Rudic:

Even if I do:

Code:
 awk '{out=""; for(i=6;i<=NF;i++){out=$out" "$i}; print $out}' pot.txt

This doesn't have any variables that print from first column.

Code:
print 3,3":"$3":"$4":"$5,$3,$4,$5

I'm making new string with $3":"$4":"$5 and then print column 3, 4,5

There's not column one that could be possible be printed with this code.

How did you come to this:?

Code:
awk '{$1 = 3}1' file


Last edited by genome; 01-16-2018 at 08:13 PM.. Reason: grammar
# 5  
Old 01-17-2018
Please become accustomed to provide decent context info of your problem.

It is always helpful to carefully and detailedly phrase a request, and to support it with system info like OS and shell, related environment (variables, options), preferred tools, adequate (representative) sample input and desired output data and the logics connecting the two including your own attempts at a solution, and, if existent, system (error) messages verbatim, to avoid ambiguities and keep people from guessing.


Quote:
Originally Posted by genome
. . .
How did you come to this:?

Code:
awk '{$1 = 3}1' file

By trying to understand your sparse specification and taking your sample input serious. The result seemed to comply to what you posted as desired output (although that was not derived from your input).
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Column printing in awk

Experts, i have a following file containing data in following manner. 1 2480434.4 885618.6 0.00 1948.00 40.00 1952.00 ... (6 Replies)
Discussion started by: Amit.saini333
6 Replies

2. Shell Programming and Scripting

awk: printing newline with last column

I was trying to simplify this from what I'm actually doing, but I started getting even more confused so I gave up. Here is the content of my input file: Academic year,Term,Course name,Period,Last name,Nickname 2012-2013,First Semester,English 12,7th Period,Davis,Lucille When I do this: ... (3 Replies)
Discussion started by: nextyoyoma
3 Replies

3. Shell Programming and Scripting

Printing another column using awk and input data

Hi, I have data of the following type, chr1 234 678 39 852 638 abcd 7895 chr1 526 326 33 887 965 kilj 5849 Now, I would like to have something like this chr1 234 678 39 852 638 abcd 7895 <a href="http://unix.com/thread=chr1:234-678">Link</a> chr1 526 326 33 887 965 kilj 5849 <a... (5 Replies)
Discussion started by: jacobs.smith
5 Replies

4. Shell Programming and Scripting

Printing a variable column using awk

Hi everyone, Ok here's the scenario. I have a control file like this. component1,file1,file2,file3,file4,file5 component2,file1,file2,file3,file4,file5I want to do a while loop here to read all files for each component. file_count=2 while ] do file_name=`cat list.txt | grep... (2 Replies)
Discussion started by: The Gamemaster
2 Replies

5. Shell Programming and Scripting

Awk while-loop printing extra character

Hi, I'm using a while-loop in an awk script. If it matches a regular expression, it prints a line. Unfortunately, each line that is printed in this loop is followed by an extra character, "1". While-statement extracted from my script: getline temp; while (temp ~ /.* x .*/) print temp... (3 Replies)
Discussion started by: redbluefish
3 Replies

6. Shell Programming and Scripting

loop in awk - column max for each column

Hello all, this should really be easy for you... I need AWK to print column maxima for each column of such input: Input: 1 2 3 1 2 1 1 3 2 1 1 2 Output should be: 2 2 3 3 This does the sum, but i need max instead: { for(i=1; i<=NF; i++) sum +=$i } END {for(i=1; i in sum;... (3 Replies)
Discussion started by: irrevocabile
3 Replies

7. Shell Programming and Scripting

Printing 1st column to lower case using awk

I want to print the 1st field in a comma seperated file to lower case and the rest the case they are. I tried this nawk -F"," '{print tolower($0)}' OFS="," file this converts whole line in to lower case i just want the first column to be converted. The below doesnt work because in... (11 Replies)
Discussion started by: pinnacle
11 Replies

8. Shell Programming and Scripting

Awk not printing the last combined column

nawk -F "|" 'FNR==NR {a=$2 OFS $3 OFS $4 OFS $5 OFS $6;next}\ {if ($5 in a)print $1,"test",$5,a, $2,$3,$4 OFS OFS OFS OFS OFS OFS OFS OFS $2-$3-$4 ; \ else print $1,"Database",$5 OFS OFS OFS OFS OFS OFS $2,$3,$4 OFS OFS OFS OFS OFS OFS OFS OFS $2-$3-$4 }' OFS="|" \ file1 file2 > file3 This... (5 Replies)
Discussion started by: pinnacle
5 Replies

9. Shell Programming and Scripting

printing with awk through while loop

ive input file contains to clums a and b spreated by pipe a | b 123|456 323|455 and xyz contains other info about a and b now i want to print as follows: a | b | "info from xyz" but "info from xyz" might be more than 1 line and i want to keep the format to 3 cloums. how to do it?... (3 Replies)
Discussion started by: windows
3 Replies

10. UNIX for Dummies Questions & Answers

Silly question on printing for loop in AWK

Hi, One silly question. I would like to add statement like below and append to a file. I used the below code; however, it does not work. Can anyone please tell me what mistakes I have made? awk ' { for (i=1;i<=563;i++) print i }'>>output.txt Thanks. -Jason (1 Reply)
Discussion started by: ahjiefreak
1 Replies
Login or Register to Ask a Question