用awk的两个文件替换条件 [英] Replacing with condition on two files awk

查看:93
本文介绍了用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

文件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

如果它们的第4列相等,我试图将file2的第1列更改为file1的相应第1列.

I am trying to change the 1st column of file2 with the corresponding 1st column of file1 if their 4th column are equal.

预期输出:

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个数组,但是找不到正确的使用方式:

I tried to create 2 array but couldn't find the correct way to use it:

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

非常感谢!

推荐答案

使用显示的示例,请尝试以下.在GNU awk 中编写和测试.

With your shown samples, could you please try following. Written and tested in GNU awk.

awk 'FNR==NR{a[$4]=$1;next} ($4 in a){$1=a[$4]} 1' file1 file2

说明: 添加以上详细说明.

Explanation: Adding detailed explanation for above.

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的两个文件替换条件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆