将多个文件与参考文件进行比较,如果匹配则打印

将多个文件与参考文件进行比较,如果匹配则打印

我有多个文件,如下所示:

b
alternate_ids rsid chromosome position alleleA alleleB index average_maximum_posterior_call info cohort_1_AA cohort_1_AB cohort_1_BB cohort_1_NULL all_AA all_AB all_BB all_NULL all_total all_maf missing_data_proportion frequentist_add_pvalue frequentist_add_info frequentist_add_beta_1 frequentist_add_se_1 comment
--- rs148087467 NA 60523 T G 1 0.999401 0.266624 7261.6 5.39417 0.00299072 0 7261.6 5.39417 0.00299072 0 7267 0.000371553 0 0.584342 0.247422 -0.473097 0.86481 NA
--- rs187110906 NA 60969 C A 2 0.995453 0.23508 7228.62 38.2204 0.138092 0.0169067 7228.62 38.2204 0.138092 0.0169067 7267 0.00264873 1.16325e-06 0.803757 0.281439 0.0754077 0

我需要将其与另一个文件匹配:

a
rs586178
rs79598313
rs72634501
rs191448950
rs9988450
rs11207995

如果alternate_idsa匹配,则将匹配的行打印到新文件中。

我听说过

$ awk -F'|' 'NR==FNR{c[$1$2]++;next};c[$1$2] > 0' file2 file1

但它只比较 2 个文件。我应该创建一个循环来运行所有文件吗?

答案1

这应该解析文件a,如果其中一行在文件中b,它将显示该行:

for i in $(<a); do grep $i b; done

如果您有一个a包含密钥的 type 类型的文件,以及多个 类型的文件b,则只需替换b为文件名上循环的变量即可。

答案2

如果我正确解释你的问题,这应该可以满足你的要求:

grep --no-filename --fixed-strings --file a b1 b2 b3 ... bN

或者,使用简短的选项:

grep -h -F -f a b1 b2 b3 ... bN

a它从files b1、等中的file 中查找固定字符串。b2or选项抑制每个匹配文件的文件名的输出。b3-h--no-filename

相关内容