替换为两个文件awk上的条件
使用这些例子: 文件1:替换为两个文件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
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看到你的个人资料就知道你从来没有接受过任何问题的答案,在答案不多的时候给它一些时间,检查它们并回复给用户。为了表示感谢,你可以投票选出所有有用的答案(鼓励用户这么做),并且可以接受他们的答案。你可以看到这个链接:干杯,快乐学习。现在你也可以回到你以前的答案,在任何适用的地方都可以接受答案,干杯。很明显,你问了一个不同的问题,但显示了错误的样本数据或预期输出。我建议你修正你的问题,以消除混淆。看到你的个人资料,你知道你从来没有接受过任何问题的答案,在答案不多的时候给它一些时间,检查它们并回复用户它是如何进行的。为了表示感谢,你可以投票选出所有有用的答案(鼓励用户这么做),并且可以接受他们的答案。你可以看到这个链接:干杯,快乐学习。现在你也可以回到你以前的答案,在任何适用的地方都可以接受答案,干杯。很明显,你问了一个不同的问题,但显示了错误的样本数据或预期输出。我建议你修正你的问题以消除困惑。