繁体   English   中英

如何重命名多个文件中的多个列?

[英]How to rename multiple columns in multiple files?

我有多个文件,看起来像这样:

trans_ENSG00000047849.txt.traw
trans_ENSG00000047848.txt.traw
trans_ENSG00000047847.txt.traw
...

其中我有大约 300 列,列名如下所示:

NA20826_NA20826 NA20828_NA20828 NA20819_NA20819

我希望所有文件中的列名都改为这种形式:

NA20826 NA20828 NA20819

换句话说,我想删除每个列名和每个文件中下划线 _ 之后的所有内容。

我应该提到的是,每个文件的开头都有一个制表符空间。

我试过这个:

sed -ri 's/[_].*$//' trans_*.txt.traw

但是当我尝试在 RI 中打开这些转换后的文件之一时出现此错误:

> e=read.table("trans_ENSG00000135541.txt.traw", header=TRUE)
Error in read.table("trans_ENSG00000135541.txt.traw", header = TRUE) : 
  more columns than column names

我猜你真的想要这个:

$ echo -e "\tNA20826_NA20826\tNA20828_NA20828\tNA20819_NA20819" | sed -r '1s/_[^\t]*//g'
        NA20826 NA20828 NA20819

_[^\\t]*因为它是TAB分隔的,所以从_开始到TAB之前(或行尾)是要删除的东西。
g标志是替换所有出现的行。
1是限制在第一线更换-标题行。

你自己ubstitude 命令's/[_].*$//' ,是从第一个_到行尾替换,所以它最终只剩下一个标题。

您需要的 sed 命令是:

sed -ri 's/_\S*//g'

无论每行有多少列,此正则表达式都会删除每个单词的一部分,从下划线开始直到下一个空格或制表符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM