查找特定字符串并打印

时间:2017-05-30 03:53:42

标签: bash shell awk grep

我有两个文件,一个输入文件 FileA 和一个参考文件 RefFile RefFile 包含我想在 FileA 的每一行中找到的字符串。 FileA 中找不到的每个字符串都应打印" NULL "代替。

FILEA:

 MIN=0000;MSI=1111;FLA=2222;DAG=9999
 MIN=000;FLA=2222

RefFile:

 MIN
 MSI
 FLA

预期输出

 MIN=0000;MSI=1111;FLA=2222
 MIN=000;NULL;FLA=2222

到目前为止,这是我的剧本:

awk -F";" -v key="MSI" '$1 ~ key {$1=$1; print}' FileA

顺便说一下,我刚刚开始使用shell脚本。谢谢。

1 个答案:

答案 0 :(得分:1)

在awk中(完全重写):

$ 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