gpt4 book ai didi

linux - awk NR==FNR 进行文件匹配,哪里出了问题?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:05:19 26 4
gpt4 key购买 nike

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

这是两个文件的格式:文件1

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 $2 更改为 print $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

关于linux - awk NR==FNR 进行文件匹配,哪里出了问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48121836/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com