我想替换第一个文件的第二列
文件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,但不知怎的,它似乎没有用。我怀疑事实上有' _'在我的第二个档案上。
谢谢
答案 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)
我会选择paste
和awk
,例如:
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