arranging columns with AWK


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting arranging columns with AWK
# 1  
Old 12-11-2010
arranging columns with AWK

Hi there!

Can this be done with AWK? Several text files (file1, file2, etc) with different number of lines. Need to append each file to a Reference File (ReFile), and match each line of file1, file2 etc to the closest value in ReFile. Empty cells must be filled with NA, or 0. The number of lines in ReFile is always greater than in any of the files to append.

INPUT

Code:
ReFile
1.0
4.6
15.5
34.3
57.5
65.9
70.6

file1
4.75
17.54
58.90

file2
6.45
18.54
33.90
66.78


OUTPUT
Code:
ReFile	file1	file2
1.0	NA	NA			
4.6	4.75 	6.45
15.5	17.54	18.54
34.3	NA	33.90
57.5	58.90	NA	
65.9	NA	66.78
70.6	NA	NA


Thanks!

Last edited by sramirez; 12-11-2010 at 11:44 PM..
# 2  
Old 12-12-2010
Since you didn't define what quantifies as closest, I made up the number 3.5. You may need to fine tune the function closest to get the best approximation.
Code:
awk '
function closest(x, i   , j)
{
  for (j = 1; j <= c[i]; ++j)
    if (x < a[i,j]+d && x > a[i,j]-d)
      return a[i,j]
  return "N/A"
}

d < 1 {
  if (FNR == 1)
    f[++n] = FILENAME
  a[n, FNR] = $0
  ++c[n]
}

d > 0 {
  if (FNR == 1) {
    printf("%s", FILENAME)
    for (i = 1; i <= n; ++i)
      printf("\t%s", f[i])
    printf("\n")
  }

  for (i = 1; i <= n; ++i)
    $(i+1) = closest($1, i)
  print
}
' file1 file2 OFS='\t' d=3.5 ReFile

This User Gave Thanks to binlib For This Post:
# 3  
Old 12-12-2010
Thanks!! It works great!!!!

New to AWK, so will be studying your code and "man AWK". It is really great that I can specify the difference between values to anything. Now, with your current code, if there are several matches to the ReFile, it will print them all. How would you specify to print each value only once (let's say print it when it founds the first match)??

Thanks again!!
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

How to use "awk" to print columns from different files in separate columns?

Hi, I'm trying to copy and paste the sixth column from a bunch of files into a single file having each column pasted in separate columns (and not one after each other in just one column.) I tried this code but works only partially because it copied and pasted 50 rows of each column... (6 Replies)
Discussion started by: Frastra
6 Replies

2. Shell Programming and Scripting

Sorting/Arranging file based on tags using awk

Hi, I have file which contains data based on tags. Output of the file should be in order of tags. Below are the files : Tags.txt f12 f13 f23 f45 f56 Original data is like this : Data.txt 2017/01/04|09:07:00:021|R|XYZ|38|9|1234|f12=CAT|f23=APPLE|f45=PENCIL|f13=CAR... (5 Replies)
Discussion started by: Prathmesh
5 Replies

3. UNIX for Beginners Questions & Answers

Help arranging text

By using this code how can we get the stars in inverted positions? str="*" for i in 1 2 3 4 5 do echo "$str" str="$str *" done The output should be like this * * * * * * * * * * * * * * * Please use CODE tags as required by forum rules!... (5 Replies)
Discussion started by: Meeran Rizvi
5 Replies

4. Shell Programming and Scripting

Need help in arranging data

I have a file with user activity and need to display only the start and end timestamp of the activity. I don't know how can we write an logic for this please help me in a bettr way to work on it User Activity_log ----------------------------------- ... (5 Replies)
Discussion started by: lazydev
5 Replies

5. UNIX for Dummies Questions & Answers

Arranging columns in a line

Hi, Please give a solution... Current File 200101701 A 5 B 283 D 222 200085506 A 5 B 6 C 304 200081406 A 5 200101784 D 1111Desired Output 200101701 A 0005 B 0283 * * D 222 ... (4 Replies)
Discussion started by: satyar
4 Replies

6. Shell Programming and Scripting

Need Help in arranging the output

Hello All, Please find attached input and output files. I want to write a shell script to achieve this. I tried using awk but not getting how to do this as I am new to shell programming. Thanks (4 Replies)
Discussion started by: Sudeep Bhattad
4 Replies

7. UNIX for Dummies Questions & Answers

Arranging data

I have thousand lines of data...: A 1 B 2 C 3 D 4 E 5 A 21 B 22 C 23 D 24 E 25 A 31 B 32 C 33 D 34 E 35 ........... ON AND AND ON (3 Replies)
Discussion started by: bobo
3 Replies

8. Shell Programming and Scripting

need help in arranging the alias

Hello Guys, I have around 100 hosts setup as alias in my profile for easy sshing. alias ada='ssh -Y username@da.domain.com' alias ast='ssh -Y username@terix.domain.com' alias bb1='ssh -X username@ggserver.ns.domain.com' . . . . I now would like to use sshmenu software in which... (4 Replies)
Discussion started by: upengan78
4 Replies

9. Shell Programming and Scripting

Arranging files

Hi all, This is program to identify and arrange programs(scripts) based on their she-bang values to a folder with the same name. The parts of mkdir and copy and creating problems.I also doubt the use of hash...maybe some problems in it. Please help out debugging this. Code pasted at: Paste... (2 Replies)
Discussion started by: Vivek788
2 Replies

10. UNIX for Dummies Questions & Answers

re-arranging text in a file with AWK

Hi Gurus, I have a text file that I want to process with the following structure; 4528788 Blah - Something 9341423 Text - Somethinghere 98792223,5546761 Some - More - Text 5119503,5159504,1234567 Text - More - Text 13459695 Stuff - Text Again 13526583 Junk - More Text Here 13595177... (1 Reply)
Discussion started by: th3g0bl1n
1 Replies
Login or Register to Ask a Question