替换两列linux

时间:2018-06-04 14:25:16

标签: linux join awk

我想替换第一个文件的第二列

文件1:

2       rs58086319      0       983550  T       C
2       rs56809628      0       983571  T       C
2       rs7608441       0       983572  A       G
2       rs114910509     0       983579  A       G
2       var_chr2_983614 0       983614  T       C
2       var_chr2_983624 0       983624  A       G
2       rs115188027     0       983632  A       C
2       var_chr2_983636 0       983636  T       C
2       var_chr2_983650 0       983650  A       G
2       var_chr2_983660 0       983660  T       C

我的第二个文件的第一列

文件2:

2_983550_T_C
2_983571_T_C
2_983572_A_G
2_983579_A_G
2_983614_T_C
2_983624_A_G
2_983632_A_C
2_983636_T_C
2_983650_A_G
2_983660_T_C

我尝试过加入和awk,但不知怎的,它似乎没有用。我怀疑事实上有' _'在我的第二个档案上。

谢谢

4 个答案:

答案 0 :(得分:2)

我有点疑惑为什么你需要第二个文件。 file2的所有信息似乎都在file1中编码。你可以这样做:

awk '{$2=$1"_"$4"_"$5"_"$6}1' file1

答案 1 :(得分:1)

你的文件2只有一列,所以使用awk。

awk -v f='file2' '{getline $2 <f}1' file1

如果file2的分隔符是“_”

awk -v f='file2' '{getline a <f;split(a,b,"_");$2=b[1]}1' file1

答案 2 :(得分:1)

编辑: 如果您想在输入文件2中将_作为字段分隔符,则以下内容可以为您提供帮助。

awk 'FNR==NR{a[FNR]=$1;next} (FNR in a){$2=a[FNR]} 1' FS="_" file2 FS=" " file1 | column -t

关注awk可能会对您有所帮助。

awk 'FNR==NR{a[FNR]=$0;next} (FNR in a){$2=a[FNR]} 1' file2 file1 | column -t

答案 3 :(得分:0)

我会选择pasteawk,例如:

paste file1 file2 | awk '{ $2 = $NF } NF--' OFS='\t'

输出:

2   2_983550_T_C    0   983550  T   C
2   2_983571_T_C    0   983571  T   C
2   2_983572_A_G    0   983572  A   G
2   2_983579_A_G    0   983579  A   G
2   2_983614_T_C    0   983614  T   C
2   2_983624_A_G    0   983624  A   G
2   2_983632_A_C    0   983632  A   C
2   2_983636_T_C    0   983636  T   C
2   2_983650_A_G    0   983650  A   G
2   2_983660_T_C    0   983660  T   C