bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: combine and ..


From: John McKown
Subject: Re: combine and ..
Date: Tue, 19 Jan 2016 07:37:03 -0600

If you want a "pure BASH" solution, I don't have one off hand. Stuff like what you mentioned, I generally use a data base for. In this particular, I'd use SQLite. A shell script using sqlite3 & awk would look something like:

#!/bin/sh
rm files.db3
cat <<EOF
.mode column
.headers on
create table file1 (name text, weight int, height int);
create table file2 (name text, weight int, height int);
EOF
awk 'NR > 1 {print "INSERT INTO file1 VALUES(\"" $1 "\"," $2 "," $3 ");"} ' file1.txt
awk 'NR > 1 {print "INSERT INTO file2 VALUES(\"" $1 "\"," $2 "," $3 ");"} ' file2.txt
cat <<EOF2
.print Lines in file1 which have names not in file2
select * from file1 where name not in (select name from file2);
.print
.print Lines in file2 which have names not in file1
select * from file2 where name not in (select name from file1);
.print
.print Statistics on common names.
select f1.name, f1.weight as weight1, f1.height as height1, f2.weight as weight2, f2.height as height, f1.weight - f2.weight as w_diff, f1.height - f2.height as h_diff 
    from file1 as f1 
    join file2 as f2 
    on f1.name=f2.name;
EOF2
} | sqlite3 files.db3

The files look like (columns separated by tabs, not spaces!)

address@hidden Val]$ cat file1.txt 
Name    weight1 height1
Alex    220     67
Tom     320     75
Craig   180     71
John    186     65

address@hidden Val]$ cat file2.txt 
Name    weight2 height2
Alex    226     69
Tom     320     75
Craig   170     70
Steve   420     80



It if were much more complicated, I'd use an R script. I'm way too lazy to try this in plain BASH, using only BASH facilities. I might think about it in ooRexx. 

On Mon, Jan 18, 2016 at 10:15 PM, Val Krem <address@hidden> wrote:


Hi John and all (re posted),

I am trying to write a bash script to do the following  small task


I have two files and each file has two variables.

File1
Name      weight1    height1
Alex      220           67
Tom        320           75
Craig     180           71
John      186           65


File2
Name     weight2  height2
Alex       226       69
Tom        320       75
Craig      170       70
Steve      420       80


Here are  my objectives,

1. Combine the two files (file1 and file2)
  a) count and List the name(s) along with their weight and height that appear in         file1 not in file2

                Name  Weight  height
             eg John     186        65

b) count and list the names(S) along with their  weight and height that appear in         file 2 but not in file1

            Name   Weight height
            Steve   420      80

    c)  for those that appear in both file 1 and file 2, I want some  stat
    Name  weight1   height1  weight2  height2   w_diff  h_diff
    Alex     220       67        226       69      6       2
     Tom      320       75        320       75      0      0
    Craig   180       71        170       70     -10    -1

d) depending on the difference
    I want to list their names   along with their weight and height

      i)  increases in both variables
         Name weight1 height1 weight2 height2 w_diff h_diff
         Alex     220       67     226       69     6         2


    ii) decreases in both variables
       Name   weight1 height1 weight2 height2 w_diff h_diff
      Craig    180      71      170      70     -10      -1

    iii) decreases in either of the variables (weight or height)
             not in this example.



w_diff= weight1 - weight2
h_diff= height1 - height2

Thank you in advance
val



--
Werner Heisenberg is driving down the autobahn. A police officer pulls
him over. The officer says, "Excuse me, sir, do you know how fast you
were going?"
"No," replies Dr. Heisenberg, "but I know where I am."

Computer Science is the only discipline in which we view adding a new wing to a building as being maintenance -- Jim Horning

Schrodinger's backup: The condition of any backup is unknown until a restore is attempted.

He's about as useful as a wax frying pan.

Maranatha! <><
John McKown

reply via email to

[Prev in Thread] Current Thread [Next in Thread]