文件中两个模式之间的 sed/awk:模式 1 由来自第二个文件的行的变量设置;由指定字符指定的模式 2

1 bash awk grep sed

我有两个文件。一个文件包含我想在第二个文件中匹配的模式。我想使用该模式在该模式(包括)之间打印到指定字符(不包括),然后连接到单个输出文件中。

例如,

文件_1:

a
c
d
Run Code Online (Sandbox Code Playgroud)

和文件_2:

>a
MEEL
>b
MLPK
>c
MEHL
>d
MLWL
>e
MTNH
Run Code Online (Sandbox Code Playgroud)

我一直在使用这个循环的变体:

while read $id;
     do 
       sed -n "/>$id/,/>/{//!p;}" File_2;
done < File_1
Run Code Online (Sandbox Code Playgroud)

希望获得类似以下输出的内容:

>a
MEEL
>c
MEHL
>d
MLWL

Run Code Online (Sandbox Code Playgroud)

但没有这样的运气。我玩过 grep/fgrep awk 和 sed 并且在这三个之间似乎无法获得正确的(或任何输出)。有人会指出我正确的方向吗?

Joh*_*024 5

尝试:

$ awk -F'>' 'FNR==NR{a[$1]; next}  NF==2{f=$2 in a} f'  file1 file2
>a
MEEL
>c
MEHL
>d
MLWL
Run Code Online (Sandbox Code Playgroud)

这个怎么运作

  • -F'>'

    这将字段分隔符设置为>

  • FNR==NR{a[$1]; next}

    在读入第一个文件时,这会a为 file 中的每一行创建一个数组键file

  • NF==2{f=$2 in a}

    对于文件 2 中包含两个字段的每一行,f如果第二个字段是键,则这将变量设置为 true,否则设置为afalse。

  • f

    如果f为真,则打印该行。