拆分字符串的标题

时间:2014-11-11 23:40:21

标签: perl awk sed

我想重新格式化下面的行。请参阅输入示例和所需输出。我一直在使用awk而没有找到正确的解决方案

输入:

>1-672762
TGAGGTAGTAGGTTGTATGGTT
>2-240457
TGAGGTAGTAGGTTGTGTGGTT
>3-130231
TAGCAGCACGTAAATATTGGCG
>4-116485
TGAGGTAGTAGGTTGTATAGTT

输出(需要以制表符分隔):

TGAGGTAGTAGGTTGTATGGTT  672762
TGAGGTAGTAGGTTGTGTGGTT  240457
TAGCAGCACGTAAATATTGGCG  130231
TGAGGTAGTAGGTTGTATAGTT  116485

4 个答案:

答案 0 :(得分:8)

使用

$ perl -lne '/^>\d+-(\d+)/ or print "$_\t$1"' file

输出:

TGAGGTAGTAGGTTGTATGGTT    672762
TGAGGTAGTAGGTTGTGTGGTT    240457
TAGCAGCACGTAAATATTGGCG    130231
TGAGGTAGTAGGTTGTATAGTT    116485

答案 1 :(得分:6)

perl中的另一种方法(" - "是chr(055)):

perl -wln055e's/(\S+)\s+(\S+).*/$2\t$1/s and print'

perl -wlp055e'BEGIN{<>}s/(\S+)\s+(\S+).*/$2\t$1/s'

答案 2 :(得分:3)

$ awk -F- '/>/{x=$2;next} {print $0 "\t" x}' file
TGAGGTAGTAGGTTGTATGGTT  672762
TGAGGTAGTAGGTTGTGTGGTT  240457
TAGCAGCACGTAAATATTGGCG  130231
TGAGGTAGTAGGTTGTATAGTT  116485

答案 3 :(得分:1)

这可能适合你(GNU sed):

sed -r 'N;s/^[^-]*-(.*)\n(.*)/\2\t\1/' file