修改列

修改列

这是我的数据集:

chr1_KI270706v1_random,153401,rs867658023,chr1_KI270706v1_random_153401
chr1_KI270706v1_random,154751,rs1030747857,chr1_KI270706v1_random_154751
chr1_KI270706v1_random,156703,rs900345029,chr1_KI270706v1_random_156703
chr1_KI270706v1_random,156856,rs576837150,chr1_KI270706v1_random_156856

我实际上希望它是这样的:

chr1,153401,rs1867658023,chr1_153401

基本上我想删除_KI_random第 1 列和第 4 列中的额外值。我尝试了此命令,但没有得到所需的输出:

awk 'NR >1 {split($1, array, "_"); print array[1] "_" array[2]; split($2, array, "_"); print array[1] "_" array[2]}' outfile > rsid_final1.csv

答案1

由于这是对各行的简单替换,因此我只使用 sed:

$ sed 's/_KI[^_,]*_[^_,]*//g' file
chr1,153401,rs867658023,chr1_153401
chr1,154751,rs1030747857,chr1_154751
chr1,156703,rs900345029,chr1_156703
chr1,156856,rs576837150,chr1_156856

但如果您愿意,也可以使用 awk 执行相同的操作:

$ awk '{gsub(/_KI[^_,]*_[^_,]*/,"")} 1' file
chr1,153401,rs867658023,chr1_153401
chr1,154751,rs1030747857,chr1_154751
chr1,156703,rs900345029,chr1_156703
chr1,156856,rs576837150,chr1_156856

如果这不是您需要的全部,那么编辑您的问题以提供更真正具有代表性的示例输入/输出,包括上述不起作用的情况。

相关内容