Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 文件匹配的awk NR==FNR,出现了什么问题?_Linux_Unix_Awk - Fatal编程技术网

Linux 文件匹配的awk NR==FNR,出现了什么问题?

Linux 文件匹配的awk NR==FNR,出现了什么问题?,linux,unix,awk,Linux,Unix,Awk,我有两个文件,我想找到第1、4、5、6列中匹配的行,有时可以切换第5、6列,这应该是允许的 以下是两个文件的格式: 文件1 文件2 正如您所看到的,有行与列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 &&

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

以下是两个文件的格式: 文件1

文件2

正如您所看到的,有行与列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\u 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

谢谢,我看到您使用file2内容作为输出。太好了。实际上,我想只输出文件2的第2列,但我可以将其与输出文件分开。你知道我原来的方法出了什么问题吗?我正试着读奥莱利的书,然后做这个。。这不是特别有效:P@Molly_K,请检查我的编辑代码,以获取file2的第二个字段作为输出,让我检查您的代码(尽管对于大型文件,可能会出现内存问题,因为您的代码使用了大量数组)。@Molly_K,好的,Molly。你的代码有很多错误,比如你分配了很多数组来检查1,2,4,6字段是否存在于其他文件中(这可以像我一样在单个数组中完成),那么不需要给它们赋值,只有字段的索引就足够了。所有阵列的密钥都是2美元,这也很混乱。我已经在我的解决方案中添加了EDIT2,为您的代码提供了一种修复,请检查一下,让我知道这是否对您有帮助?@RavinderSingh13:pluse uno一如既往地提供了一个书面的答案和技术支持。祝大家好运。谢谢@RavinderSingh13。这很有帮助。我将避免在将来使用多个阵列。我确实有大量的文件,所以它并不像你观察到的那样理想。非常感谢您的评论:)
$2
文件2中的值类似于
1:10177:A;文件1第2列中未显示的AC
。文件2中出现
$2
的前缀,但不是整个值。
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
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