如何根据字段拆分文件并编辑内容

时间:2016-10-19 22:13:41

标签: python unix split

我不确定是否可以使用unix命令执行此操作,或者我需要更复杂的代码,例如python。

我有一个包含3列的大输入文件 - id,不同的序列(第二列)分组在不同的组中(第3列)。

Seq1        MVRWNARGQPVKEASQVFVSYIGVINCREVPISMEN       Group1
Seq2        PSLFIAGWLFVSTGLRPNEYFTESRQGIPLITDRFDSLEQLDEFSRSF  Group1
Seq3        HQAPAPAPTVISPPAPPTDTTLNLNGAPSNHLQGGNIWTTIGFAITVFLAVTGYSF  Group20

我想: 根据组ID拆分此文件,并为每个组创建单独的文件;编辑每个文件中的信息,添加">"在id的开头签名;然后为序列

创建一个新行
Group1.txt file
>Seq1
MVRWNARGQPVKEASQVFVSYIGVINCREVPISMEN       
>Seq2
PSLFIAGWLFVSTGLRPNEYFTESRQGIPLITDRFDSLEQLDEFSRSF

Group20.txt file
>Seq3
HQAPAPAPTVISPPAPPTDTTLNLNGAPSNHLQGGNIWTTIGFAITVFLAVTGYSF

我该怎么做?

2 个答案:

答案 0 :(得分:2)

AWK会做到这一点:

awk '{ print ">"$1 "\n" $2 >> $3".txt"}' input.txt

答案 1 :(得分:1)

这个shell脚本可以解决这个问题:

#!/usr/bin/env bash

filename="data.txt"
while read line; do
    id=$(echo "${line}" | awk '{print $1}')
    sequence=$(echo "${line}" | awk '{print $2}')
    group=$(echo "${line}" | awk '{print $3}')
    printf ">${id}\n${sequence}\n" >> "${group}.txt"
done < "${filename}"

其中data.txt是包含原始数据的文件的名称。

重要的是,在运行脚本之前,组文件不应该存在。