首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用bash perl更改部分重复的后缀

用bash perl更改部分重复的后缀
EN

Stack Overflow用户
提问于 2019-12-18 12:30:09
回答 1查看 33关注 0票数 0

我有一个包含多个列的文件,其中一些名称是部分重复的,如下所示:

代码语言:javascript
复制
[]$head -n1 file.csv

AGE_030 AGE_031 AGE_032 AMET_022 ... MEND_009 MOLI_032 ... OIA_013 SH-1 SH-10 SH-107
SH-108 SH-4 SH-1_new SH-4_new AREN_1 AREN_28 AREN_3 AREN_4 AGE_032_new AMET_022_new
MEND_009_new MOLI_032_new OIA_013_new... 

所有带有_new后缀的列名都有另一个匹配项。

我想用这种方式替换两个mathes的后缀,用于所有部分复制:

  • AGE_032 to AGE_032_old
  • AGE_032_new to AGE_032

我想要这样做,让我可以编辑文件中的列名,就像perl -i一样。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-18 12:35:36

代码语言:javascript
复制
perl -pale'
   next if $. != 1;

   my %map = map { /^(.*)_new\z/s ? ( $1 => "$1_old", $_ => $1 ) : () } @F;
   @F = map { $map{$_} // $_ } @F;
   $_ = "@F";
'

如果行为AGE_030 AGE_030_new AGE_031,则@F将包含"AGE_030", "AGE_030_new", "AGE_031"。由此创建了以下映射:"AGE_030" => "AGE_030_old", "AGE_030_new" => "AGE_030"。最后,我们应用映射和重建线。

Specifying file to process to Perl one-liner

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59392083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档