Use of join


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Use of join
# 1  
Old 10-16-2009
Use of join

I want basically to merge two config files each of them look like that

File:
Option1 value1
Optionx valuex
....
One of those files is default config while the other is generated by my script. Now here is the problem, when my script generates an option that previously has been set by default i want to override it. So if we have situation like that

Default:
Option1 DefaultValue1
Option2 DefaultValue2
GeneratedConfig:
Option1 Value1
Option3 Value3
Option4 Value4

After joining those files I want to get

JoinedFile:
Option1 Value1
Option2 DefaultValue2
Option3 Value3
Option4 Value4
I prefer bash solutions to others, but anything that works will do. Thanks a lot.
# 2  
Old 10-16-2009
Code:
awk '{A[$1]=$0} END {for ( i in A ) print A[i]}' default generated

ksh93:
Code:
#!/bin/ksh
typeset -A settings
cat default generated|
while read option val; do
  settings[$option]=$val
done
for i in "${!settings[@]}"; do
  echo "$i ${settings[$i]}"
done | sort



---------- Post updated at 02:03 PM ---------- Previous update was at 11:57 AM ----------

In bash it is more complicated because of the lack of associative arrays.
Code:
#!/bin/bash
set -a options
set -a vals
i=0
while read option val; do
  for (( j=0; j<i; j++ )); do
    if [[ ${options[j]} = $option ]]; then
      break
    fi
  done
  options[j]=$option
  vals[j]=$val
  if (( j==i )); then
    (( i++ ))
  fi
done < <(cat  default generated)
for (( j=0; j<i; j++ )); do
  echo "${options[j]} ${vals[j]}"
done


Last edited by Scrutinizer; 10-16-2009 at 05:47 PM..
# 3  
Old 10-18-2009
Thanks for the solution. But will that work when value field isn't just one word but couple of them? I can't test it right now as i'm not at my linux box.
# 4  
Old 10-19-2009
This perl solution will work for even more than one word values.
Code:
open DFH,"<$ARGV[0]";

while(<DFH>)  {
    ($key, $value) = ( $_ =~ /(^[^ ]*)(.*)$/ );
    $default{$key} = $value;
}

open GFH,"<$ARGV[1]";

while (<GFH>)  {
    ($key, $value) = ( $_ =~ /(^[^ ]*)(.*)$/ );
    $gfh{$key} = $value;
}

$i=0;
while(++$i)  {
    if ( defined $gfh{"Option$i"} )  {
        print "Option$i $gfh{\"Option$i\"}\n";
    } elsif ( defined $default{"Option$i"} )  {
        print "Option$i $default{\"Option$i\"}\n";
    } else {
        exit(0);
    }
}

It should be executed like the following.
Code:
$ perl t.pl default generatedconfig 
Option1  Value1
Option2  Default Value2
Option3  Value3
Option4  Value4

Note: It will work for the given input, no assumption made.
Obviously it is not a very strong solution, as the most of cases are not handled.
# 5  
Old 10-19-2009
Quote:
Originally Posted by Adas
Thanks for the solution. But will that work when value field isn't just one word but couple of them? I can't test it right now as i'm not at my linux box.
You're welcome. Yes, all 3 solutions will also work when the value fields consist of a couple of words, both default and generated values.

S.

Last edited by Scrutinizer; 10-19-2009 at 10:26 AM..
 
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Join, merge, fill NULL the void columns of multiples files like sql "LEFT JOIN" by using awk

Hello, This post is already here but want to do this with another way Merge multiples files with multiples duplicates keys by filling "NULL" the void columns for anothers joinning files file1.csv: 1|abc 1|def 2|ghi 2|jkl 3|mno 3|pqr file2.csv: 1|123|jojo 1|NULL|bibi... (2 Replies)
Discussion started by: yjacknewton
2 Replies

2. UNIX for Dummies Questions & Answers

How to use the the join command to join multiple files by a common column

Hi, I have 20 tab delimited text files that have a common column (column 1). The files are named GSM1.txt through GSM20.txt. Each file has 3 columns (2 other columns in addition to the first common column). I want to write a script to join the files by the first common column so that in the... (5 Replies)
Discussion started by: evelibertine
5 Replies

3. UNIX for Dummies Questions & Answers

how to join two files using "Join" command with one common field in this problem?

file1: Toronto:12439755:1076359:July 1, 1867:6 Quebec City:7560592:1542056:July 1, 1867:5 Halifax:938134:55284:July 1, 1867:4 Fredericton:751400:72908:July 1, 1867:3 Winnipeg:1170300:647797:July 15, 1870:7 Victoria:4168123:944735:July 20, 1871:10 Charlottetown:137900:5660:July 1, 1873:2... (2 Replies)
Discussion started by: mindfreak
2 Replies

4. Shell Programming and Scripting

Join help

im trying to join 3 files together sort -n ${ASS1_DATA_DIR}Prac1 | sed '/^#/d' > ${ASS1_OUTPUT_DIR}Prac1temp sort -n ${ASS1_DATA_DIR}Prac2 | sed '/^#/d' > ${ASS1_OUTPUT_DIR}Prac2temp join -a1 -a2 -1 1 -2 1 -o "0 1.2 2.2" -e " " ${ASS1_OUTPUT_DIR}Prac1temp ${ASS1_OUTPUT_DIR}Prac2temp >... (6 Replies)
Discussion started by: bigubosu
6 Replies

5. UNIX for Dummies Questions & Answers

Join 2 files with multiple columns: awk/grep/join?

Hello, My apologies if this has been posted elsewhere, I have had a look at several threads but I am still confused how to use these functions. I have two files, each with 5 columns: File A: (tab-delimited) PDB CHAIN Start End Fragment 1avq A 171 176 awyfan 1avq A 172 177 wyfany 1c7k A 2 7... (3 Replies)
Discussion started by: InfoSeeker
3 Replies

6. Shell Programming and Scripting

Join

joining two files: File1: ----- 1|M 2|M 3|F File2: ----- 1|abc|def 3|xyz|pqr join -t '|' 1.txt 2.txt gives(Itried many other ways) 1|M|abc|def 3|F|xyz|pqr but I need the result like following (14 Replies)
Discussion started by: greenworld
14 Replies

7. Programming

sql,multiple join,outer join issue

example sql: select a.a1,b.b1,c.c1,d.d1,e.e1 from a left outer join b on a.x=b.x left outer join c on b.y=c.y left outer join d on d.z=a.z inner join a.t=e.t I know how single outer or inner join works in sql. But I don't really understand when there are multiple of them. can... (0 Replies)
Discussion started by: robbiezr
0 Replies

8. Shell Programming and Scripting

Join

Hi, need some help in joining please, FILE 1: ------- 1|05/20/2009| 2|04/21/2009| 2|03/21/2009| FILE 2: ------- 1|Michel|Hawkins|05/10/2009| 1|Michel|Hawkins|03/10/2007| 2|Krish|Lander|09/10/2005| FILE 3: ------- 1|M|32|03/22/2009| 2|M|42|04/22/2009| 2|M|41|03/10/2008| I want to... (7 Replies)
Discussion started by: greenworld
7 Replies

9. Shell Programming and Scripting

join (pls help on join command)

Hi, I am a new learner of join command. Some result really make me confused. Please kindly help me. input: file1: LEO oracle engineer 210375 P.Jones Office Runner ID897 L.Clip Personl Chief ID982 S.Round UNIX admin ID6 file2: Dept2C ID897 6 years Dept5Z ID982 1 year Dept3S ID6 2... (1 Reply)
Discussion started by: summer_cherry
1 Replies
Login or Register to Ask a Question