printing certain elelment of a column


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting printing certain elelment of a column
# 1  
Old 10-15-2012
printing certain elelment of a column

"File1.txt"
Code:
CHR SNP BP ANNOT
8 rs1878374 127974042 MYC(-843.5kb)|FAM84B(+334.4kb)
2 rs2042077 16883103 VSNL1(-702.2kb)|SMC6(-825.5kb)|RAD51AP2(-672.4kb)|MYCN(+878.5kb)|MSGN1(-978.2kb)|GEN1(-915.6kb)|FAM49A(+172.5kb)
12 rs10431347 3023955 TULP3(+103.4kb)|TSPAN9(-32.86kb)|TEAD4(+3.852kb)|PRMT8(-446.7kb)|PARP11(-764.3kb)|NRIP2(+209.5kb)|ITFG2(+219.6kb)|FOXM1(+167.4kb)|FKBP4(+240.6kb)|EFCAB4B(-603.4kb)|CACNA1C(+346.6kb)|C12orf32(+155.1kb)
5 rs10071904 41255697 TTC33(+463.9kb)|RPL37(+384.6kb)|PTGER4(+526.1kb)|PRKAA1(+421.6kb)|PLCXD3(-87.11kb)|OXCT1(-510.2kb)|LOC285636(-684.5kb)|FLJ40243(+148.5kb)|FBXO4(-705.4kb)|CARD6(+364.5kb)|C7(+236.9kb)|C6(0)

I want to print ANNOT whose absolute value of kb is the smallest.
so the desired output will be

Code:
CHR SNP BP ANNOT
8 rs1878374 127974042 FAM84B
2 rs2042077 16883103 FAM49A
12 rs10431347 TEAD4
5 rs10071904 41255697 C6

Thanks!

Last edited by Scrutinizer; 10-15-2012 at 12:51 PM.. Reason: code tags instead of quote tags
# 2  
Old 10-15-2012
Code:
awk '
BEGIN { FS="[()]";}
NR==1 {print;}
NR>1 {
 fl=$1;
 sub(" *$","",fl);
 sub(" *[^ ]*$","",fl);
 la=10000000;
 of="";
 for (f=2; f<=NF; f+=2) {
  pf=$(f-1);
  sub(" *$","",pf);
  sub(".*[ |]","",pf);
  sub("kb$","",$f);
  $f=$f*1;
  $f<0 ? af=($f * -1) : af=($f * 1);
  if (af<la) {
     la=af;
     of=pf;
  }
 }
 print fl,of;
}
' File1.txt

This User Gave Thanks to rdrtx1 For This Post:
# 3  
Old 10-15-2012
Seems to work great! what does la=10000000? mean?
# 4  
Old 10-15-2012
Just setting a very high value to start with. There are probably other ways to accomplish the same.
This User Gave Thanks to rdrtx1 For This Post:
# 5  
Old 10-15-2012
A perl alternative:
Code:
#perl -lane 'if(/(\d+\s+\w+\s+\d+\s+)(.*)/){$f=$1;$p=$2;
printf $f;$min=10000000;while ($p =~ m/(\w+)\(([^(kb]+)(kb)?\)/g ){
         $a=abs($2);if ($a <= $min) { $min=$a;$val=$1;}};print $val}else{print} ' infile

Code:
CHR SNP BP ANNOT
8 rs1878374 127974042 FAM84B
2 rs2042077 16883103 FAM49A
12 rs10431347 3023955 TEAD4
5 rs10071904 41255697 C6


Last edited by Klashxx; 10-15-2012 at 02:55 PM.. Reason: Print headers
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Printing a 2 column output using scripts

Hi, I'm fairly new to scripting and Unix. I'm having trouble printing the number of directories and number of files in all the directories in 2 columns using scripts. #!/bin/bash echo "# of Directories --------- # of Messages/Files " numDir= $(find . -type d | wc -l) numMsg= $(find .... (4 Replies)
Discussion started by: nuclearpenguin
4 Replies

2. Shell Programming and Scripting

Inconsistent column printing

Hi, I have a file that has inconsistently numbered columns. Like row1 has 23 columns, and row 2 has 34 columns etc. I would like to re-order the first 8 columns as required and from the 9th column till the end, I would like to print it as it is. I tried to read the re-ordered 8 columns... (7 Replies)
Discussion started by: jacobs.smith
7 Replies

3. UNIX for Dummies Questions & Answers

Printing out lines that have the same value in the first column but different value in the second

Hi, I have a text file that looks like the following: ILMN_1343291 6 74341083 74341772 ILMN_1343291 6 74341195 74341099 ILMN_1343295 12 6387581 6387650 ILMN_1651209 1 1657001 1657050 ILMN_1651209 5 83524260 83524309 I... (1 Reply)
Discussion started by: evelibertine
1 Replies

4. 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

5. Shell Programming and Scripting

Printing second column of several files into one

HI All, I have exactly 100 text files with extension .txt. The files contain numbers like this: 1.txt 0.4599994 65914 0.40706193 190743 0.39977244 185019 0.39831382 74906 0.3915928 122428 0.38844505 39999 0.38820446 72691 0.38787442 176430 0.38670844 28791 0.38597047 91091... (2 Replies)
Discussion started by: shoaibjameel123
2 Replies

6. UNIX for Dummies Questions & Answers

Printing a particular column using SED

Hi, i want to display only the particular column using SED command. For example, ps -ef|grep ash |sed -n '1p'|cut -d ' ' -f2   this gives 29067 ps -ef|grep ash |sed -n '1p'|awk '{print $2}'    this also gives the same  in the same way i need the solution using sed. Please... (4 Replies)
Discussion started by: pandeesh
4 Replies

7. Solaris

Printing a particular column[autosys]

Dear All, I'm using autosys in my production system. My concern is as follows: autosys -j <some_job_nm> Output: Job Name Last Start Last End ST Run Pri/Xit ... (1 Reply)
Discussion started by: saps19
1 Replies

8. UNIX for Dummies Questions & Answers

creating a file using the fist column and printing second column

Hello all. I have a problem that I need help solving. I would like to convert the following file: human pool1_12 10e-02 45 67 human pool1_1899 10e-01 45 29 human pool1_1829 10e-01 43 26 horse pool1_343 10e-20 65 191 horse pool1_454 10e-09 44 43... (5 Replies)
Discussion started by: viralnerd
5 Replies

9. Shell Programming and Scripting

regarding about printing row to column

Hello, I got data like that, =111 A= alpha B= 1 C= qq D= 45 F= ss G= 334 =1234 A= B= 2w C= D= 443 F= G= =3434 A= B= e3e (5 Replies)
Discussion started by: davidkhan
5 Replies

10. UNIX for Dummies Questions & Answers

Printing highest value from one column

Hi, I have a file that looks like this: s6 98 s6 91 s6 56 s5 32 s5 10 s5 4 So what I want to do is print only the highest value for each value in the column: So the file will look like this: s6 98 s5 32 Thanks (4 Replies)
Discussion started by: phil_heath
4 Replies
Login or Register to Ask a Question