使用sed

时间:2016-04-05 11:42:20

标签: mysql bash csv sed

我有一个多GB的文本文件,如下所示:

>seq1
AAAUAAAUAAAUAAA
............... (  0.00)
>seq2
AAAUAAAUAAAUAAU
............... (  0.00)
>seq3
AAAUAAAUAAAUAAC
............... (  0.00)
>seq4
AAAUAAAUAAAUAAG
............... (  0.00)
>seq5
AAAUAAAUAAAUAUA
............... (  0.00)

我需要将其转换为可以转储到MySQL表中的格式。我的想法是使它成为一个看起来像这样的CSV文件:

>seq1,AAAUAAAUAAAUAAA,...............,(  0.00)
>seq2,AAAUAAAUAAAUAAU,...............,(  0.00)

但我完全不确定如何编写正则表达式以使sed做它的事情。

2 个答案:

答案 0 :(得分:2)

试试这个:

sed '/^>seq[0-9]/{N;N;s/\n/,/g;s/ \((  [0-9]\.[0-9][0-9])\)/,\1/}' file

注意:-i选项编辑文件到位,无需确认。

  • />seq[0-9]/搜索以>seq开头,后跟一个数字
  • 的行
  • N;N;s/\n/,/g;用逗号替换下两个换行符
  • 最后一个替换命令将括号之间的十进制数替换为前面带有逗号
  • 的相同字符串

答案 1 :(得分:0)

使用perl命令行(假设点是核苷酸)

perl -0076 -pe 's/\b\s+/,/g' file

-0将记录分隔符更改为>(八进制中的076)
-p自动打印记录
-e执行以下命令