Bash 查找特定字符串并打印

Bash 查找特定字符串并打印,bash,shell,awk,grep,Bash,Shell,Awk,Grep,我有两个文件,一个输入文件FileA和一个参考文件RefFile。RefFile包含我希望在FileA的每一行中找到的字符串。在FileA中未找到的每个字符串都应打印“NULL” 文件A: MIN=0000;MSI=1111;FLA=2222;DAG=9999 MIN=000;FLA=2222 参考文件: MIN MSI FLA 预期产出: MIN=0000;MSI=1111;FLA=2222 MIN=000;NULL;FLA=2222 到目前为止,我的剧本如下: awk-F

我有两个文件,一个输入文件FileA和一个参考文件RefFile。RefFile包含我希望在FileA的每一行中找到的字符串。在FileA中未找到的每个字符串都应打印“NULL”

文件A:

 MIN=0000;MSI=1111;FLA=2222;DAG=9999
 MIN=000;FLA=2222
参考文件:

 MIN
 MSI
 FLA
预期产出

 MIN=0000;MSI=1111;FLA=2222
 MIN=000;NULL;FLA=2222
到目前为止,我的剧本如下:

awk-F”;“-v key=“MSI”'$1~key{$1=$1;print}”文件a

顺便说一句,我刚刚接触shell脚本。谢谢。

在awk(完全重写)中:

$cat program.awk
开始{FS=OFS=“;”}
NR==FNR{a[++i]=$1;next}
{
d=”“#打印缓冲区
删除b#记录缓冲区=

对于(j=1;jt这太棒了!如果我在这里打印NULL如何:MIN=000;NULL;FLA=2222?如果你的意思是NULL在FileA中,它会被拆分到
c[1]
中,如果它在ref文件中,它会被打印出来。如果你的意思是脚本只生成文本NULL(就像在预期的输出中一样)你真的需要为它的外观提供一些规则。是的,但基本上,我想在FileA中查找RefFile中的内容,如果RefFile中的某个字符串不在FileA中,它只打印“NULL”。在这种情况下,FileA中缺少MSI,因此第2行的输出将为,MIN=000;NULL;FLA=2222。很抱歉造成混淆。因此,应该在FileA的每一行中找到RefFile中的每个关键字,或者为其打印NULL?是的,应该是!
$ cat program.awk
BEGIN { FS=OFS=";" }
NR==FNR { a[++i]=$1; next }
{
    d=""                                              # print buffer
    delete b                                          # record buffer =
    for(j=1;j<=NF;j++){
        split($j,c,"=")
        b[c[1]]=$j                                    # b[key]=field
    }
    for(j=1;j<=i;j++)                                 # for all Refs
        d=d (d==""?"":OFS) (a[j] in b?b[a[j]]:"NULL") # gather buffer
    print d
}
$ awk -f program.awk RefFile FileA
MIN=0000;MSI=1111;FLA=2222
MIN=000;NULL;FLA=2222