Thursday, March 31, 2022

[SOLVED] Match 1st value before comma of each line from first file with second file line by line

Issue

My 1st file -

#cat 123
tom,123
jack,222
rock
google,908
mohan,323
ram,789

My 2nd file -

#cat www
vicky,tom,home
google,monk,uber
dhoom,monk,uber
ram,monk,uber
rock,monk,uber
jack,monk,uber

Desired output -

#cat  match_output.txt
tom,123,vicky,tom,home
rock,rock,monk,uber
jack,222,jack,monk,uber
google,908,google,monk,uber
ram,789,ram,monk,uber

For now, I'm getting only this -

#cat match_output.txt
rock,monk,uber

My Script -

#!/bin/bash

# because File2 is bigger, it gets the main loop.
# read each line of File2
>/var/lib/jenkins/Jack/match_output.txt
while IFS=, read -r string; do
    # read each line of File1.txt
    while IFS=, read -r string2; do
    # check match, and write if needed.
    if [[ $string == *"$string2"* ]]; then
        echo $string >> match_output.txt
        echo "wrote "$string" to match_output.txt..."
    fi
    done < /var/lib/jenkins/Jack/123
done < /var/lib/jenkins/Jack/www

Not able to read 1st value of 1st file before the comma of each line and match with 2nd file line by line and print the output in a new file....


Solution

To get the first value before the comma, you can use the cut command.

With the following code

    if [[ $string == *"$string2"* ]]; then
        echo $string >> match_output.txt
        echo "wrote "$string" to match_output.txt..."
    fi

you compare the complete lines. If you want to compare $string with only the first value (before the comma) of $string2, you need to adjust this comparison.

    string2FirstValue=`echo "$string2" |cut -d',' -f1`
    if [[ $string == *"$string2FirstValue"* ]]; then
        echo $string2,$string >> match_output.txt
    fi


Answered By - Sheldon
Answer Checked By - Robin (WPSolving Admin)