sed格式化文件中提取的文本

时间:2017-07-10 18:55:02

标签: sed

我正在使用sed从大文件中提取。下面似乎以下面的格式提取数据,从那里我不知道如何清理文件以查看所需的输出。可能有一种更好的方式我不确定如何。谢谢你:)。

  1. 如果$2
  2. 中的文字之前的任何前导符号(,或:或;)被删除
  3. $3中的所有逗号都会转到;
  4. $3文本已删除前面的空格
  5. 输出
  6. 中有3个制表符分隔字段

    文件以空格分隔

    81201 APC   gene analysis; full gene sequence
    81210 BRAF  , gene analysis, full gene sequence, V600 variant
    

    所需的输出制表符分隔

    81201   APC gene analysis;full gene sequence
    81210   BRAF    gene analysis;full gene sequence;V600 variant
    

    SED

    sed -e 's/([^()]*)//g' file.txt | sed '$!N;s/\n/ /' > file
    

    原始文件

    81201 APC (adenomatous polyposis coli) (eg, familial adenomatosis 
    polyposis [FAP], attenuated FAP) gene
    analysis; full gene sequence
    81210 BRAF (B-Raf proto-oncogene, serine/threonine kinase) (eg, colon 
    cancer), gene analysis, V600 variant(s)
    

1 个答案:

答案 0 :(得分:1)

我不确定所显示的命令是否按预期工作,但由于这不是您问题的一部分,我将忽略它。

这是一种使用几个相对简单的表达式进行最终清理的方法:

sed -e 's/^\s*\([^ \t]\+\)\s\+\([^ \t]\+\)\s\+[,;]\?\s*\(.*\)/\1\t\2\t\3/' \
    -e 's/[,;]\s*/;/g'

第一个表达式仅捕获您想要的部分:没有多余的空格或逗号。粗体部分表示保留的捕获组。第二部分用分号替换所有逗号,因为在应用表达式时第三个字段之外不应该有任何逗号。请注意,sed始终使用贪婪量词,以便\s\+正确处理空白问题。

根据您的sed版本,您可能需要稍微进行转义。您可能还需要将\s替换为[ \t]

<强>输入

81201 APC   gene analysis; full gene sequence
81210 BRAF  , gene analysis, full gene sequence, V600 variant

<强>输出

81201   APC     gene analysis;full gene sequence
81210   BRAF    gene analysis;full gene sequence;V600 variant