我想要比较来自映射文件的信息以检索制表符分隔文件格式的交叉链接信息。
例如,一个文件包含
COG0001 882.DVU3168
COG0002 883.DvMF_2502
COG0001 1140.Synpcc7942_0645
COG0001 1148.SYNGTS_2220
另一个文件
COG0001 H
COG0002 E
最终文件应包含以下信息:
COG0001 882.DVU3168 H
COG0002 883.DvMF_2502 E
COG0001 1140.Synpcc7942_0645 H
COG0001 1148.SYNGTS_2220 H
编辑
回到我的问题,我还想打印文件2到文件3的信息。
我的命令是:
awk -F $'\t' 'FNR==NR{a[$2]++;next}a[$1]''{print $0, ..... }' file2 file1 > file3
这将为我提供从 file1 到第 2 列(文件 2)到第 1 列(文件 1)的匹配内容的所有内容。
如何设置才能打印文件 2 中的信息?
答案1
使用 awk 你可以这样做:
$ awk 'NR==FNR{a[$1]=$2;next}{print $0, a[$1]}' file2 file1
COG0001 882.DVU3168 H
COG0002 883.DvMF_2502 E
COG0001 1140.Synpcc7942_0645 H
COG0001 1148.SYNGTS_2220 H
该NR==FNR{a[$1]=$2;next}
块针对 file2 运行,并将第二个字段存储在映射中,使用第一个字段作为键。
该{print $0, a[$1]}
块针对 file1 运行,并打印当前行,然后是从映射中检索到的值。
如果您希望数据以制表符分隔(其他空格不分隔字段),您可以运行awk -F'\t' ...
,如果您还希望输出制表符分隔,请使用awk -F'\t' -v OFS='\t' ...
。
答案2
如果您不介意输出顺序:
$ join <(sort file1) <(sort file2)
COG0001 1140.Synpcc7942_0645 H
COG0001 1148.SYNGTS_2220 H
COG0001 882.DVU3168 H
COG0002 883.DvMF_2502 E