将一个文件搜索到另一个文件,打印匹配和下一行

Oci*_*ity 1 bash awk grep

这是我的问题:我有两个文件,一个有名字(大约1k行,没有重复)

File_Names

A
C
F
Run Code Online (Sandbox Code Playgroud)

还有第二个带有名称和数据的文件(大约100k行,没有重复)

File_Data

A
Data_A
B
Data_B
C
Data_C
D
Data_D
E
Data_E
F
Data_F
Run Code Online (Sandbox Code Playgroud)

我需要从名称搜索到数据文件,打印结果和下一行.

就像是:

A
Data_A
C
Data_C
F
Data_F
Run Code Online (Sandbox Code Playgroud)

我有找到数据文件名称的部分,但仍无法打印下一行

awk 'FNR==NR{
        a[$1]++;
        next}
        a[$1]
' File_Names File_Data
Run Code Online (Sandbox Code Playgroud)

这回来了

A
C
F
Run Code Online (Sandbox Code Playgroud)

这是我所保留的代码的一部分,因为我已经尝试过其他代码

awk 'FNR==NR{
    a[$0]=FNR;i=FNR;next}
($0 in a){
    t=$0;
    getline;b[a[t]]=$0}
END{
    for(k=1;k<=i;k++)print b[k]
}'
Run Code Online (Sandbox Code Playgroud)

并添加/删除行,如:

- {x=NR+1}(NR<=x){print}
- {getline;print;}
Run Code Online (Sandbox Code Playgroud)

也尝试使用grep

grep -f File_Names File_Data
Run Code Online (Sandbox Code Playgroud)

但仍然没有.对不起重复的问题,但可用的解决方案对我不起作用.提前致谢.

Rom*_*est 6

grep 解:

grep -A1 --no-group-separator -xf File_Names File_Data
Run Code Online (Sandbox Code Playgroud)
  • A num- num匹配行后打印尾随上下文行
  • --no-group-separator - 不要在行组之间打印分隔符

输出:

A
Data_A
C
Data_C
F
Data_F
Run Code Online (Sandbox Code Playgroud)