BSP*_*BSP 3 text-processing join
我想比较映射文件中的信息,以便以制表符分隔的文件格式检索交联信息。
例如,一个文件包含
COG0001 882.DVU3168
COG0002 883.DvMF_2502
COG0001 1140.Synpcc7942_0645
COG0001 1148.SYNGTS_2220
Run Code Online (Sandbox Code Playgroud)
另一个文件
COG0001 H
COG0002 E
Run Code Online (Sandbox Code Playgroud)
最终文件应包含以下信息:
COG0001 882.DVU3168 H
COG0002 883.DvMF_2502 E
COG0001 1140.Synpcc7942_0645 H
COG0001 1148.SYNGTS_2220 H
Run Code Online (Sandbox Code Playgroud)
编辑
回到我的问题,我还想将信息从文件 2 打印到文件 3。
我的命令是:
awk -F $'\t' 'FNR==NR{a[$2]++;next}a[$1]''{print $0, ..... }' file2 file1 > file3
Run Code Online (Sandbox Code Playgroud)
这将根据匹配第 2 列(file2)到第 1 列(file1)的内容为我提供从 file1 的所有内容。
如何设置以便我也可以打印文件 2 中的信息?
使用 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
Run Code Online (Sandbox Code Playgroud)
该NR==FNR{a[$1]=$2;next}
块为 file2 运行,并将第二个字段存储在映射中,使用第一个字段作为键。
该{print $0, a[$1]}
块为 file1 运行,它打印当前行,然后是从映射中检索到的值。
如果您希望数据以制表符分隔(其他空格不分隔字段),您可以运行awk -F'\t' ...
,如果您还希望输出制表符分隔,请使用awk -F'\t' -v OFS='\t' ...
.