繁体   English   中英

awk NR == FNR用于文件匹配,出了什么问题?

[英]awk NR==FNR for file matching, what went wrong?

我有两个文件,我想在第1,4,5,6列中找到匹配的行,有时可以切换5,6列,应该允许这样做。

这是两个文件的格式:file1

1   1:10177 0   10177   AC  A
1   1:10352 0   10352   TA  T
1   1:14930 0   14930   G   A
1   1:15211 0   15211   T   G
1   1:15274 0   15274   G   A

文件2

1   1:10177:A:AC    0   10177   AC  A
1   1:10235:T:TA    0   10235   TA  T
1   1:10352:T:TA    0   10352   TA  T
1   1:10616:CCGCCGTTGCAAAGGCGCGCCG:C    0   10616   C   CCGCCGTTGCAAAGGCGCGCCG
1   1:10642:G:A 0   10642   A   G

如您所见,存在与第1、4、5和6列匹配的行。

我的awk行如下:

awk 'NR==FNR {chr[$2]=$1; pos[$2]=$4; a1[$2]=$5; a2[$2]=$6} NR>FNR && ($2 in chr) && chr[$2]==$1 && pos[$2]==$4 && (a1[$2]==$5 && a2[$2]==$6 || a1[$2]==$6 && a2[$2]==$5) {print $2}' file1 file2 > extract_results.txt

谁能帮助我了解问题出在哪里? 非常感谢!!

由于您尚未显示预期的输出,因此根据您的查询,我编写了此代码。

awk 'FNR==NR{a[$1,$4,$5,$6];b[$1,$4,$6,$5];next} (($1,$4,$5,$6) in a) || (($1,$4,$6,$5) in b) ' Input_file1  Input_file2

编辑:根据OP的要求,我们需要获取第二个字段作为输出,因此也按如下所示放置此代码。

awk 'FNR==NR{a[$1,$4,$5,$6];b[$1,$4,$6,$5];next} (($1,$4,$5,$6) in a) || (($1,$4,$6,$5) in b){print $2}'   Input_file1   Input_file2

如果你想利用输出到一个输出文件然后更改print $2print $2 > "output_file"在上面的代码了。

EDIT2:虽然它不是高效的代码,但是由于OP正在学习并且要求对OP的代码进行修复,因此请将其放在此处。

awk 'NR==FNR {chr[$1]; pos[$4]; a1[$5]; a2[$6];next} ($1 in chr) && ($4 in pos) && ((($5 in a1) && ($6 in a2)) || (($6 in a1) && ($5 in a2))){print $2}' file1 file2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM