Sunday, June 5, 2022

[SOLVED] comparing files Unix

Issue

I have 2 scripts file.txt and file2.txt

file1.txt


name|mandatory|
age|mandatory| 
address|mandatory|
email|mandatory| 
country|not-mandatory| 

file2.txt

gabrielle||nashville|[email protected]||

These are my exact data files, In file1 column1 is the field name and column2 is to note whether the field should not be null in file2.

In file2 data is in single row separated by |. The age mentioned as mandatory in file1 is not present in file2[which is a single row] and that is what my needed output too.

Expected output:

age mandatory

I got with code that file2 is in same format as file1 where mandatory is replaced with field2 data.

awk -F '|' '
    NR==FNR && $3=="mandatory" {m[$2]++}
    NR>FNR && $3=="" && m[$2] {printf "%s mandatory\n", $2}
' file1.txt file2.txt

Solution

You have to iterate over fields for(... i <= NR ...).

awk -F '|' '
    NR==FNR { name[NR]=$1; man[NR]=$2 }
    NR!=FNR {
      for (i = 1; i <= NR; ++i) {
         if ($i == "" && man[i] == "mandatory") {
             printf("Field %s is mandatory!\n", name[i]);
         }
      }
   }
' file1.txt file2.txt


Answered By - KamilCuk
Answer Checked By - Marie Seifert (WPSolving Admin)