问题来源
我有两个文件,一个是plink过滤后得到的.fam文件(空格分隔);另一个是样本对应关系文件(tab分隔)。
文件1:
文件2:
两个文件匹配,awk常规操作。这里我想要保留文件2中和文件1第一二列匹配得到的样本(匹配后文件2的第一列)。当然这里两个文件数目是一样的,所以应该全部匹配才对(测试用)。
常规操作:
awk ‘{if(NR==FNR){a[$1]}else if($2 in a)print $1}‘ file1.fam file2
发现少了两个样本,空格符分开的两个样。
定义下输入(FS)输出(OFS):
awk -v FS=‘ ‘ -v OFS=‘\t‘ ‘{if(NR==FNR){a[$1]}else if($2 in a)print $1}‘ file1.fam file2
结果是一样的,因为输入的分隔符一样。
当空白格和tab同时存在时,如何定义?如何得到正确的结果?
解决方法
在对应文件前分别指定FS即可。
awk ‘{if(NR==FNR){a[$1]}else if($2 in a)print $1}‘ FS=" " file1.fam FS="\t" file2
https://*.com/questions/24516141/processing-2-files-with-different-field-separators-using-awk