【问题标题】:Merge three columns in one (linux, python, or perl)将三列合并为一列(linux、python 或 perl)
【发布时间】:2021-12-04 16:33:58
【问题描述】:

我有一个文件 (.tsv),其中包含调用所有样本的变体。我想将前三列合并为一列:

示例: 原文:

file name= variables.tsv > 我要合并的前三列是:

车道样本ID条码

B31 00-00-NNA-0000 0000

期望的输出:

身份证

B31_00-00-NNA-0000_0000

推荐的方法是什么?

【问题讨论】:

  • tr ' ' '_' < YourFile.tsv 也许?
  • 还有不想合并的列吗?

标签: linux csv merge columnsorting vcftools


【解决方案1】:

一种方式,使用 perl 单线:

perl -F'\t' -lane '
    if ($. == 1) {
        print join("\t", "ID", @F[3..$#F])
    } else {
        print join("\t", join("_", @F[0,1,2]), @F[3..$#F])
    }' variants tsv

在选项卡上将每一行拆分为一个数组 (@F),并使用该数组的 slices 打印出标题和后面的行以提取适当的元素,然后将这些元素连接成分隔字符串。

【讨论】:

  • 当然,松散地使用术语“单线”。
【解决方案2】:

从此开始

lane    sampleID    Barcode
B31 00-00-NNA-0000  0000

并使用Miller,您可以运行

mlr --tsv put -S '$ID=$lane."_".$sampleID."_".$Barcode' input.tsv >output.tsv

拥有

+------+----------------+---------+-------------------------+
| lane | sampleID       | Barcode | ID                      |
+------+----------------+---------+-------------------------+
| B31  | 00-00-NNA-0000 | 0000    | B31_00-00-NNA-0000_0000 |
+------+----------------+---------+-------------------------+

如果您只想要命令的 ID 字段

mlr --tsv put -S '$ID=$lane."_".$sampleID."_".$Barcode' then cut -f ID input.tsv >output.tsv

【讨论】:

    猜你喜欢
    • 2020-11-26
    • 2019-05-18
    • 2014-05-16
    • 2019-06-08
    • 1970-01-01
    • 2020-08-19
    • 2021-07-09
    • 1970-01-01
    相关资源
    最近更新 更多