【问题标题】:How to append the file name to a character string in the file [closed]如何将文件名附加到文件中的字符串[关闭]
【发布时间】:2016-01-14 15:45:58
【问题描述】:

我有几个文件格式如下:

chr10   Cufflinks   transcript  92828   95504   1   -   .   gene_id "CUFF.1"; transcript_id "ENST00000447903"; FPKM "0.0000000000"; frac "0.000000"; conf_lo "0.000000"; conf_hi "0.000000"; cov "0.000000"; full_read_support "no";
chr10   Cufflinks   exon    92828   94054   1   -   .   gene_id "CUFF.1"; transcript_id "ENST00000447903"; exon_number "1"; FPKM "0.0000000000"; frac "0.000000"; conf_lo "0.000000"; conf_hi "0.000000"; cov "0.000000";
chr10   Cufflinks   exon    94555   94665   1   -   .   gene_id "CUFF.1"; transcript_id "ENST00000447903"; exon_number "2"; FPKM "0.0000000000"; frac "0.000000"; conf_lo "0.000000"; conf_hi "0.000000"; cov "0.000000";
chr10   Cufflinks   exon    94744   94852   1   -   .   gene_id "CUFF.1"; transcript_id "ENST00000447903"; exon_number "3"; FPKM "0.0000000000"; frac "0.000000"; conf_lo "0.000000"; conf_hi "0.000000"; cov "0.000000";
chr10   Cufflinks   exon    95348   95504   1   -   .   gene_id "CUFF.1"; transcript_id "ENST00000447903"; exon_number "4"; FPKM "0.0000000000"; frac "0.000000"; conf_lo "0.000000"; conf_hi "0.000000"; cov "0.000000";

我想要实现的是在输入文件中将文件名附加到字符 CUFF* 上。我的文件的名称是 sample_1,所以输出应该如下所示:

chr10   Cufflinks   transcript  92828   95504   1   -   .   gene_id "CUFF.1_sample_1"; transcript_id "ENST00000447903"; FPKM "0.0000000000"; frac "0.000000"; conf_lo "0.000000"; conf_hi "0.000000"; cov "0.000000"; full_read_support "no";
chr10   Cufflinks   exon    92828   94054   1   -   .   gene_id "CUFF.1_sample_1"; transcript_id "ENST00000447903"; exon_number "1"; FPKM "0.0000000000"; frac "0.000000"; conf_lo "0.000000"; conf_hi "0.000000"; cov "0.000000";
chr10   Cufflinks   exon    94555   94665   1   -   .   gene_id "CUFF.1_sample_1"; transcript_id "ENST00000447903"; exon_number "2"; FPKM "0.0000000000"; frac "0.000000"; conf_lo "0.000000"; conf_hi "0.000000"; cov "0.000000";
chr10   Cufflinks   exon    94744   94852   1   -   .   gene_id "CUFF.1_sample_1"; transcript_id "ENST00000447903"; exon_number "3"; FPKM "0.0000000000"; frac "0.000000"; conf_lo "0.000000"; conf_hi "0.000000"; cov "0.000000";
chr10   Cufflinks   exon    95348   95504   1   -   .   gene_id "CUFF.1_sample_1"; transcript_id "ENST00000447903"; exon_number "4"; FPKM "0.0000000000"; frac "0.000000"; conf_lo "0.000000"; conf_hi "0.000000"; cov "0.000000";

这是我迄今为止尝试过的:

cat sample_1 | sed 's/CUFF*/CUFF*_sample1/g'

任何 Unix 单行代码都会很棒...

【问题讨论】:

  • 我看不出区别——在未滚动的数据中不可见,在滚动的数据中也不明显(实际上oId "CUFF.14.1";需要变成oId "CUFF.14.1_sample1";)。请重做这个问题,删掉更多的列,并清楚地解释输入和输出之间的区别,以及额外信息的来源。样本数据文件是否名为sample1?如果它被称为sample1.txt 或有后缀怎么办?如果它有一个路径/path/to/sample1 呢? 尝试过什么(问题出在哪里)?
  • 大家好,我已经编辑了我的问题..感谢 cmets....

标签: perl shell unix


【解决方案1】:

sed - 尤其是正则表达式 - 不能那样工作。阅读perlre 了解如何编写正则表达式。

特别是 - * 的工作方式与您可能习惯的不同 - 它是一个模式量词,而不是通配符。它适用于前面的“符号”。因此,在您的表达式中,您将替换“CUF”,然后是零个或多个“F”实例。所以它将匹配“CUF”、“CUFF”和“CUFFFFFFFF”。

但不是“CUFF.1”。

在表达式的右侧,它甚至没有这样做。

也许你想要:

perl -pe 's/(CUFF[^"]+)/$1_sample/g' sample_1 

如果您想就地编辑,请使用-i

(注意 - 使用 perl,因为它确实有效。不过,您当然可以使用 sed 做一些非常相似的事情)。

【讨论】:

  • 非常感谢它的工作..:)
猜你喜欢
  • 2011-12-27
  • 2014-11-18
  • 2011-10-30
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-11
相关资源
最近更新 更多