Compare two files and print based on common variable value.

Hi All,

i have below two files.

FILE:

NAME="/dev/sda" TYPE="disk" SIZE="60G" OWNER="root" GROUP="disk" MODE="brw-rw----" PKNAME="" MOUNTPOINT=""
NAME="/dev/sda1" TYPE="part" SIZE="500M" OWNER="root" GROUP="disk" MODE="brw-rw----" PKNAME="/dev/sda" MOUNTPOINT="/boot"
NAME="/dev/sda2" TYPE="part" SIZE="29.5G" OWNER="root" GROUP="disk" MODE="brw-rw----" PKNAME="/dev/sda" MOUNTPOINT=""
NAME="/dev/mapper/centos-root" TYPE="lvm" SIZE="56.5G" OWNER="root" GROUP="disk" MODE="brw-rw----" PKNAME="/dev/sda2" MOUNTPOINT="/"
NAME="/dev/mapper/centos-swap" TYPE="lvm" SIZE="3G" OWNER="root" GROUP="disk" MODE="brw-rw----" PKNAME="/dev/sda2" MOUNTPOINT="[SWAP]"
NAME="/dev/sda3" TYPE="part" SIZE="30G" OWNER="root" GROUP="disk" MODE="brw-rw----" PKNAME="/dev/sda" MOUNTPOINT=""
NAME="/dev/mapper/centos-root" TYPE="lvm" SIZE="56.5G" OWNER="root" GROUP="disk" MODE="brw-rw----" PKNAME="/dev/sda3" MOUNTPOINT="/"
NAME="/dev/sr0" TYPE="rom" SIZE="603M" OWNER="root" GROUP="cdrom" MODE="brw-rw----" PKNAME="" MOUNTPOINT=""

FILE1:

 Filesystem Size Used Avail Use% Mounted
 Filesystem Size Used Avail Use% Mounted
 devtmpfs 1.9G 0 1.9G 0% /dev
 tmpfs 1.9G 0 1.9G 0% /dev/shm
 tmpfs 1.9G 191M 1.7G 11% /run
 tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
 /dev/mapper/centos-root 57G 48G 9.4G 84% /
 /dev/sda1 497M 217M 281M 44% /boot
 tmpfs 379M 0 379M 0% /run/user/0

i want to compare both FILE AND FILE1 based on NAME and Filesystem column values.
if both are equal i want to combine both lines and print the entire ouput in one line

Desired output :

/dev/mapper/centos-root 57G 48G 9.4G 84% /  NAME="/dev/mapper/centos-root" TYPE="lvm" SIZE="56.5G" OWNER="root" GROUP="disk" MODE="brw-rw----" PKNAME="/dev/sda2" MOUNTPOINT="/"

tried below script but it's giving error.

#!/bin/bash
FILE=/tmp/d5
FILE1=/tmp/d4
while read LINE;
do    . <(echo $LINE)
        if [ "$MOUNTPOINT" != "" ]

mounted=$MOUNTPOINT

file_system=$NAME
type=$TYPE


while read LINE1;
do    . <(echo $LINE1)

File_System=$Filesystem
if [ "$MOUNTPOINT" == "$Filesystem" ];then

echo -e "mounted:$MOUNTPOINT type:$type file_system:$Filesystem avail:$Avail \n"

done < FILE1

fi
fi
done < $FILE

how about:

awk 'FNR==NR{f1[$2]=$0;next} $1 in f1 {print $0, f1[$1]}' FS='"' FILE FS=' ' FILE1

What errors do you get? You're applying the logics designed for "FILE" and depending on its structure and wellbehavedness to a totally different data set. That can't fly. Try instead

awk 'FNR==NR {DF["\"" $1 "\""] = $0; next} $2 in DF {print DF[$2], $0}' file1 FS="[ =]" file2

Hi All,

Can someone explain the meaning of the below statement.

awk 'FNR==NR{f1[$2]=$0;next} $1 in f1 {print $0, f1[$1]}' FS='"' FILE FS=' ' FILE1