grep 查找模式列表中的重复值

grep 查找模式列表中的重复值

我有文件 A.txt,它是唯一 id(第 1 列)及其相应值(第 2 列)的列表:

A.txt

ABC1D_T1_B1  123.4
ABC2D_T1_B2  146.7
ABC3D_T1_B1  567.8
ABC4D_T0_B2  96.8
ABC1D_T0_B1  145.9

第二个文件是 B.txt,不是唯一的,但有重复的条目

ABC1D_T1_B1
ABC1D_T1_B1
ABC2D_T1_B2
ABC3D_T1_B1
ABC3D_T1_B1
ABC4D_T0_B2
ABC1D_T0_B1
ABC1D_T0_B1

如何从 A.txt 中 grep B.txt 并报告重复列表的第 2 列的值

结果:

ABC1D_T1_B1  123.4
ABC1D_T1_B1  123.4
ABC2D_T1_B2  146.7
ABC3D_T1_B1  567.8
ABC3D_T1_B1  567.8
ABC4D_T0_B2  96.8
ABC1D_T0_B1  145.9
ABC1D_T0_B1  145.9
ABC1D_T0_B1  145.9

通常,如果 B.txt 中存在唯一条目,则

grep -Fw -f B.txt A.txt >Result.txt

如何使用 grep 对多个重复条目执行此操作?

答案1

您可以使用简单的方法来做到这一点join

join A.txt B.txt

但是,为了工作,两个文件必须按连接键(此处为第一个(空白分隔)字段)排序。为此,只需使用sort -b filename.

答案2

因为您还标记了awk

awk 'FNR == NR {a[$1] = $0; next}; {print a[$1]}' A.txt B.txt

我不认为单个可以做到这一点,而是和 的grep组合:xargsgrep

xargs -I{} grep -Fw -- {} A.txt < B.txt

相关内容