我有多个看起来像这样的文件:
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
是将替换限制在第一行-标题行中。
您自己的substitude命令's/[_].*$//'
是从第一行_
到行尾进行替换,因此最终将只剩下一个标题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句