我有两个文件。一个文件包含我想在第二个文件中匹配的模式。我想使用该模式在该模式(包括)之间打印到指定字符(不包括),然后连接到单个输出文件中。
例如,
文件_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 并且在这三个之间似乎无法获得正确的(或任何输出)。有人会指出我正确的方向吗?
尝试:
$ 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为真,则打印该行。