我有一个文件 (.tsv),其中包含调用所有样本的变体。我想将前三列合并为一列:
示例: 原文:
文件名= variant.tsv > 我要合并的前三列是:
泳道样品ID 条形码
B31 00-00-NNA-0000 0000
期望的输出:
ID
B31_00-00-NNA-0000_0000
推荐的方法是什么?
我有一个文件 (.tsv),其中包含调用所有样本的变体。我想将前三列合并为一列:
示例: 原文:
文件名= variant.tsv > 我要合并的前三列是:
泳道样品ID 条形码
B31 00-00-NNA-0000 0000
期望的输出:
ID
B31_00-00-NNA-0000_0000
推荐的方法是什么?
从此开始
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
一种方法,使用 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
打印出标题和后面的行以提取适当的元素,然后将其连接成分隔字符串。