比较 2 个文件 unix

比较 2 个文件 unix

我有 2 个脚本file.txtfile2.txt

文件1.txt

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

文件2.txt

|col1|col2| 
|name|gabrielle| 
|age|| 
|address|nashville| 
|email|[email protected]| 
|country|| 

我需要创建一个临时文件来获取 file1 中该列具有强制的所有行。然后我需要检查 file2 中提到的必填字段是否为空

预期输出:

age mandatory

答案1

你可以用awk这个:

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

输出

age mandatory

解释

awk迭代两个文件的每一行。记录分隔符被认为是|。这意味着第一个字段始终为空。

file1.txt脚本的第一行在(NR到目前为止读取的记录数与当前文件的行号匹配)中查找第三个字段为 的行mandatory,并将第二个字段保存在数组中。

脚本的第二行查找行file2.txt(读取的记录数大于当前文件的行号),并且当第三个字段为空并且它位于我们之前创建的列表中时,我们打印出第一个字段的名称

相关内容