Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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
替换为两个文件awk上的条件_Awk - Fatal编程技术网

替换为两个文件awk上的条件

替换为两个文件awk上的条件,awk,Awk,使用这些例子: 文件1: rs12124819 1 0.020242 776546 A G rs28765502 1 0.022137 832918 T C rs7419119 1 0.022518 842013 T G rs950122 1 0.022720 846864 G C

使用这些例子:

文件1:

      rs12124819     1        0.020242          776546 A G
      rs28765502     1        0.022137          832918 T C
       rs7419119     1        0.022518          842013 T G
        rs950122     1        0.022720          846864 G C
文件2:

1_752566    1   0   752566  G   A
1_776546    1   0   776546  A   G
1_832918    1   0   832918  T   C
1_842013    1   0   842013  T   G
如果文件2的第4列相等,我将尝试用相应的文件1的第1列更改文件2的第1列

预期产出:

rs12124819  1   0   752566  G   A
rs28765502  1   0   776546  A   G
rs7419119   1   0   832918  T   C
rs950122    1   0   842013  T   G
我尝试创建2个阵列,但找不到正确的使用方法:

awk 'FNR==NR{a[$4],b[$1];next} ($4) in a{$1=b[FNR]}1' file1 file2  > out.txt 

非常感谢

对于您展示的样品,请尝试以下内容。用GNU
awk
编写和测试

awk 'FNR==NR{a[$4]=$1;next} ($4 in a){$1=a[$4]} 1' file1 file2
说明:添加上述内容的详细说明

awk '            ##Starting awk program from here.
FNR==NR{         ##Checking condition if FNR==NR which will be TRUE when file1 is being read.
  a[$4]=$1       ##Creating array a whose index is $4 and value is $1.
  next           ##next will skip all further statements from here.
}
($4 in a){       ##Checking condition if 4th field is present in a then do following.
  $1=a[$4]       ##Setting value of 1st field of file2 as array a value with index of 4th column
}
1                ##1 will print edited/non-edited line.
' file1 file2    ##mentioning Input_file names here.

有了你们展示的样品,你们能试一下下面的吗。用GNU
awk
编写和测试

awk 'FNR==NR{a[$4]=$1;next} ($4 in a){$1=a[$4]} 1' file1 file2
说明:添加上述内容的详细说明

awk '            ##Starting awk program from here.
FNR==NR{         ##Checking condition if FNR==NR which will be TRUE when file1 is being read.
  a[$4]=$1       ##Creating array a whose index is $4 and value is $1.
  next           ##next will skip all further statements from here.
}
($4 in a){       ##Checking condition if 4th field is present in a then do following.
  $1=a[$4]       ##Setting value of 1st field of file2 as array a value with index of 4th column
}
1                ##1 will print edited/non-edited line.
' file1 file2    ##mentioning Input_file names here.

您可以尝试此
awk

awk'FNR==NR{map[FNR]=1;next}{$1=map[FNR]}1'文件1文件2 |列-t
rs12124819 1 0 752566 G A
rs28765502 1 0 776546 A G
rs7419119 1 0 832918 T C
rs950122 1 0 842013吨天然气

您可以试试这个
awk

awk'FNR==NR{map[FNR]=1;next}{$1=map[FNR]}1'文件1文件2 |列-t
rs12124819 1 0 752566 G A
rs28765502 1 0 776546 A G
rs7419119 1 0 832918 T C
rs950122 1 0 842013吨天然气
另一种选择(如果文件在连接键中排序,如示例数据中所示)

请注意,您的输入文件只有3条匹配记录。

另一种选择(如果文件在连接键中按示例数据中的顺序排序)


请注意,您的输入文件只有3条匹配记录。

您好,非常感谢!输出是预期的,谢谢。但是,您是否介意解释一下在该命令中检查第4列值的位置?在匹配第4列时有点不清楚。e、 g.
752566
仅存在于第二个文件中,而不存在于第一个文件中嗨,非常感谢!输出是预期的,谢谢。但是,您是否介意解释一下在该命令中检查第4列值的位置?在匹配第4列时有点不清楚。e、 g.
752566
仅存在于第二个文件中,而不存在于第一个文件中。非常感谢!它也可以很好地工作,只是为了确定,
a[$4]=$1
确实创建了某种带有键/值的词汇表,您可以通过在那里指定键来访问值
a[$4]
?再次感谢@卡加米,是的,如果你仔细看我的解释,我已经解释过了
a[$4]=$1
仅类似于键值对逻辑。它正在创建一个数组,索引为第4个字段($4),值为第1个字段($1),如果这里有任何查询,请告诉我。您好@RavinderSingh13,我一直在使用您的方法,它可以按预期工作,但我想知道您是否知道如何添加另一个条件。例如,在本例中,如果我想在预先存在的条件上添加另一个条件,即:$2 file1=$2 file2。我确实尝试过使用这个命令,但它不起作用,因为该值总是在dico中找到<代码>awk'FNR==NR{a[$4]=$1;b[$2]=$1;next}($4在a中和$2在b){$1=a[$4]}1'文件1文件2您好,非常感谢!它也可以很好地工作,只是为了确定,
a[$4]=$1
确实创建了某种带有键/值的词汇表,您可以通过在那里指定键来访问值
a[$4]
?再次感谢@卡加米,是的,如果你仔细看我的解释,我已经解释过了
a[$4]=$1
仅类似于键值对逻辑。它正在创建一个数组,索引为第4个字段($4),值为第1个字段($1),如果这里有任何查询,请告诉我。您好@RavinderSingh13,我一直在使用您的方法,它可以按预期工作,但我想知道您是否知道如何添加另一个条件。例如,在本例中,如果我想在预先存在的条件上添加另一个条件,即:$2 file1=$2 file2。我确实尝试过使用这个命令,但它不起作用,因为该值总是在dico中找到<代码>awk'FNR==NR{a[$4]=$1;b[$2]=$1;next}($a中的4和$b中的2){$1=a[$4]}1'文件2看到你的个人资料就知道你从来没有接受过任何问题的答案,在答案不多的时候给它一些时间,检查它们并回复给用户。为了表示感谢,你可以投票选出所有有用的答案(鼓励用户这么做),并且可以接受他们的答案。你可以看到这个链接:干杯,快乐学习。现在你也可以回到你以前的答案,在任何适用的地方都可以接受答案,干杯。很明显,你问了一个不同的问题,但显示了错误的样本数据或预期输出。我建议你修正你的问题,以消除混淆。看到你的个人资料,你知道你从来没有接受过任何问题的答案,在答案不多的时候给它一些时间,检查它们并回复用户它是如何进行的。为了表示感谢,你可以投票选出所有有用的答案(鼓励用户这么做),并且可以接受他们的答案。你可以看到这个链接:干杯,快乐学习。现在你也可以回到你以前的答案,在任何适用的地方都可以接受答案,干杯。很明显,你问了一个不同的问题,但显示了错误的样本数据或预期输出。我建议你修正你的问题以消除困惑。