Sponsored Content
Operating Systems Linux Merge two files based on matching criteria Post 302982358 by PK29 on Wednesday 28th of September 2016 10:20:51 AM
Old 09-28-2016
Merge two files based on matching criteria

Hi,
I am trying to merge two csv files based on matching criteria:
File description is as below :
Key_File :
Code:
000|ÇÞ|Key_HF|ÇÞ|Key_FName		
001|ÇÞ|Key_11|ÇÞ|Sort_Key22|ÇÞ|Key_31
002|ÇÞ|Key_12|ÇÞ|Sort_Key23|ÇÞ|Key_32
003|ÇÞ|Key_13|ÇÞ|Sort_Key24|ÇÞ|Key_33
050|ÇÞ|Key_15|ÇÞ|Sort_Key25|ÇÞ|Key_34
085|ÇÞ|Key_15|ÇÞ|Sort_Key26|ÇÞ|Key_35|ÇÞ|Key_41|ÇÞ|Key_42
090|ÇÞ|Key_19|ÇÞ|Sort_Key27
095|ÇÞ|Key_19|ÇÞ|Sort_Key28
100|ÇÞ|Key_11|ÇÞ|Sort_Key29
300|ÇÞ|Key_10|ÇÞ|Sort_Key30
400|ÇÞ|Key_14|ÇÞ|Sort_Key31
500|ÇÞ|Key_15|ÇÞ|Sort_Key32
999|ÇÞ|Key_SS|ÇÞ|

Value_File:
Code:
000|ÇÞ|Val_HF|ÇÞ|Value_FName		
001|ÇÞ|Val_11|ÇÞ|Sort_Val22|ÇÞ|Val_31
002|ÇÞ|Val_12|ÇÞ|Sort_Val23|ÇÞ|Val_32
003|ÇÞ|Val_13|ÇÞ|Sort_Val24|ÇÞ|Val_33
050|ÇÞ|Val_15|ÇÞ|Sort_Val25|ÇÞ|Val_34
085|ÇÞ|Val_15|ÇÞ|Sort_Val26|ÇÞ|Val_35|ÇÞ||ÇÞ|null
090|ÇÞ|Val_19|ÇÞ|Sort_Val27
095|ÇÞ|Val_19|ÇÞ|Sort_Val28
100|ÇÞ|Val_11|ÇÞ|Sort_Val29
300|ÇÞ|Val_10|ÇÞ|Sort_Val30
400|ÇÞ|Val_14|ÇÞ|Sort_Val31
500|ÇÞ|Val_15|ÇÞ|Sort_Val32
999|ÇÞ|Val_SS|ÇÞ|

Here |ÇÞ| is the delimiter.
My output requirement is :
Code:
000|ÇÞ|Key_HF=Val_HF|ÇÞ|Key_FName=Value_FName		
001|ÇÞ|Key_11=Val_11|ÇÞ|Sort_Key22=Sort_Val22|ÇÞ|Key_31=Val_31
002|ÇÞ|Key_12=Val_12|ÇÞ|Sort_Key23=Sort_Val23|ÇÞ|Key_32=Val_32
003|ÇÞ|Key_13=Val_13|ÇÞ|Sort_Key24=Sort_Val24|ÇÞ|Key_33=Val_33
050|ÇÞ|Key_15=Val_15|ÇÞ|Sort_Key25=Sort_Val25|ÇÞ|Key_34=Val_34
085|ÇÞ|Key_15=Val_15|ÇÞ|Sort_Key26=Sort_Val26|ÇÞ|Key_35=Val_35|ÇÞ|Key_41=|ÇÞ|Key_42=null
090|ÇÞ|Key_19=Val_19|ÇÞ|Sort_Key27=Sort_Val27
095|ÇÞ|Key_19=Val_19|ÇÞ|Sort_Key28=Sort_Val28
100|ÇÞ|Key_11=Val_11|ÇÞ|Sort_Key29=Sort_Val29
300|ÇÞ|Key_10=Val_10|ÇÞ|Sort_Key30=Sort_Val30
400|ÇÞ|Key_14=Val_14|ÇÞ|Sort_Key31=Sort_Val31
500|ÇÞ|Key_15=Val_15|ÇÞ|Sort_Key32=Sort_Val32
999|ÇÞ|Key_SS=Val_SS|ÇÞ|

ie. Compare two files if first column value(001) of Key_file matches with first column value of the Value_file then display the output as key value pair separated by = sign (eg Key_HF=Val_HF)

I tried using below code but not getting the expected output =>
Code:
awk 'NR==FNR{ A[$1]=$2; next } { print $FNR ":" $2 } 1' FS="[|]ÇÞ[|]" Key_File Value_File

Any idea how it will work ??
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

deleting files and folders matching criteria

Hello, I'm spendind hours trying to figure out how a script could remove files and folders older than 30days in a given volume (/dataVolumes/Booba.1.0). Within this volume, all users have their personal folder that starts with "RC-..", so the script should skip them for deletion. I will... (4 Replies)
Discussion started by: H3001
4 Replies

2. AIX

Simultaneous searching for files (names matching certain criteria) in several directo

Hello everyone, My OS is AIX 5.2 I would like some help in getting command syntax that does the following: 1. Searches simultaneously several directories downward; 2. Checks every subdirectory in each directory (and so on...) for file names that contain certain characters such as “~”, start... (0 Replies)
Discussion started by: Hopeful
0 Replies

3. Shell Programming and Scripting

Script move and rename based on matching criteria

Hi all, i would like to create a script that move and rename files from all the subdirectories of a given directory to others subdirectories of the same directory based on "matching" criteria in the "from" and "to" parameters. Example: Begin script from /home/test/1_T_2008* move to... (3 Replies)
Discussion started by: braidomik
3 Replies

4. Shell Programming and Scripting

Archive files to different target folders based on criteria

Hi All, I am creting archive script in which i need to split the source file's to different target folder's based on the input file name first character. Input1.txt -- will contains file names that are needs to be Archive. Input1.txt A1213355 B2255666 C2254555 A6655444 C5566445 ... (2 Replies)
Discussion started by: kmsekhar
2 Replies

5. UNIX for Dummies Questions & Answers

How to select files based on a criteria?

I have a file..... xxx 2345 455 abc 345 555 cdf 456 777 fff 555 888 Now my requirement is, Say if, i want to select only those records prior to the record fff 555 888... how do i go about doing this in unix.... The fff would be hardcoded as it wud be fixed and everytime when i... (7 Replies)
Discussion started by: saggiboy10
7 Replies

6. UNIX for Dummies Questions & Answers

How to fetch files right below based on some matching criteria?

I have a requirement where in i need to select records right below the search criteria qwertykeyboard white 10 20 30 30 40 50 60 70 80 qwertykeyboard black 40 50 60 70 90 100 qwertykeyboard and white are headers separated by a tab. when i execute my script..i would be searching... (4 Replies)
Discussion started by: vinnu10
4 Replies

7. Shell Programming and Scripting

changing the file-name in a directory for all files matching a particular criteria

i have a directory which consist of multiple files out of which there are some files that has -e in their name. I want to write a script that will change all those file-name to -l example there are some files with name : file1-e.wav file2-e.wav file3-english-e.wav file-4-e.wav ... (3 Replies)
Discussion started by: mukulverma2408
3 Replies

8. Shell Programming and Scripting

Merge two files matching columns

Hi! I need to merge two files when col1 (x:x:x) matching and adds second column from file1.txt. # cat 1.txt aaa;a12 bbb;b13 ccc;c33 ddd;d55 eee;e11 # cat 2.txt bbb;b55;34444;d55 aaa;a15;35666;a44 I try with this awk and I get succesfully first column from 1.txt: # awk -F";"... (2 Replies)
Discussion started by: fhluque
2 Replies

9. Shell Programming and Scripting

How to merge two or more fields from two different files where there is non matching column?

Hi, Please excuse for often requesting queries and making R&D, I am trying to work out a possibility where i have two files field separated by pipe and another file containing only one field where there is no matching columns, Could you please advise how to merge two files. $more... (3 Replies)
Discussion started by: karthikram
3 Replies

10. Shell Programming and Scripting

How to merge two files with unique values matching.?

I have one script as below: #!/bin/ksh Outputfile1="/home/OutputFile1.xls" Outputfile2="/home/OutputFile2.xls" InputFile1="/home/InputFile1.sql" InputFile2="/home/InputFile2.sql" echo "Select hobby, class, subject, sports, rollNumber from Student_Table" >> InputFile1 echo "Select rollNumber... (3 Replies)
Discussion started by: Sharma331
3 Replies
funtbl(1)							SAORD Documentation							 funtbl(1)

NAME
funtbl - extract a table from Funtools ASCII output SYNOPSIS
funtable [-c cols] [-h] [-n table] [-p prog] [-s sep] <iname> DESCRIPTION
[NB: This program has been deprecated in favor of the ASCII text processing support in funtools. You can now perform fundisp on funtools ASCII output files (specifying the table using bracket notation) to extract tables and columns.] The funtbl script extracts a specified table (without the header and comments) from a funtools ASCII output file and writes the result to the standard output. The first non-switch argument is the ASCII input file name (i.e. the saved output from funcnts, fundisp, funhist, etc.). If no filename is specified, stdin is read. The -n switch specifies which table (starting from 1) to extract. The default is to extract the first table. The -c switch is a space-delimited list of column numbers to output, e.g. -c "1 3 5" will extract the first three odd-numbered columns. The default is to extract all columns. The -s switch specifies the separator string to put between columns. The default is a single space. The -h switch specifies that column names should be added in a header line before the data is output. With- out the switch, no header is prepended. The -p program switch allows you to specify an awk-like program to run instead of the default (which is host-specific and is determined at build time). The -T switch will output the data in rdb format (i.e., with a 2-row header of column names and dashes, and with data columns separated by tabs). The -help switch will print out a message describing program usage. For example, consider the output from the following funcnts command: [sh] funcnts -sr snr.ev "ann 512 512 0 9 n=3" # source # data file: /proj/rd/data/snr.ev # arcsec/pixel: 8 # background # constant value: 0.000000 # column units # area: arcsec**2 # surf_bri: cnts/arcsec**2 # surf_err: cnts/arcsec**2 # summed background-subtracted results upto net_counts error background berror area surf_bri surf_err ---- ------------ --------- ------------ --------- --------- --------- --------- 1 147.000 12.124 0.000 0.000 1600.00 0.092 0.008 2 625.000 25.000 0.000 0.000 6976.00 0.090 0.004 3 1442.000 37.974 0.000 0.000 15936.00 0.090 0.002 # background-subtracted results reg net_counts error background berror area surf_bri surf_err ---- ------------ --------- ------------ --------- --------- --------- --------- 1 147.000 12.124 0.000 0.000 1600.00 0.092 0.008 2 478.000 21.863 0.000 0.000 5376.00 0.089 0.004 3 817.000 28.583 0.000 0.000 8960.00 0.091 0.003 # the following source and background components were used: source_region(s) ---------------- ann 512 512 0 9 n=3 reg counts pixels sumcnts sumpix ---- ------------ --------- ------------ --------- 1 147.000 25 147.000 25 2 478.000 84 625.000 109 3 817.000 140 1442.000 249 There are four tables in this output. To extract the last one, you can execute: [sh] funcnts -s snr.ev "ann 512 512 0 9 n=3" | funtbl -n 4 1 147.000 25 147.000 25 2 478.000 84 625.000 109 3 817.000 140 1442.000 249 Note that the output has been re-formatted so that only a single space separates each column, with no extraneous header or comment informa- tion. To extract only columns 1,2, and 4 from the last example (but with a header prepended and tabs between columns), you can execute: [sh] funcnts -s snr.ev "ann 512 512 0 9 n=3" | funtbl -c "1 2 4" -h -n 4 -s " " #reg counts sumcnts 1 147.000 147.000 2 478.000 625.000 3 817.000 1442.000 Of course, if the output has previously been saved in a file named foo.out, the same result can be obtained by executing: [sh] funtbl -c "1 2 4" -h -n 4 -s " " foo.out #reg counts sumcnts 1 147.000 147.000 2 478.000 625.000 3 817.000 1442.000 SEE ALSO
See funtools(7) for a list of Funtools help pages version 1.4.2 January 2, 2008 funtbl(1)
All times are GMT -4. The time now is 12:56 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy