我有 2 个脚本file.txt
和file2.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
(读取的记录数大于当前文件的行号),并且当第三个字段为空并且它位于我们之前创建的列表中时,我们打印出第一个字段的名称