如何使用 awk 从列中删除符号

如何使用 awk 从列中删除符号

我有这样的数据:

chr1    134901  139379  -   "ENSG00000237683.5";
chr1    860260  879955  +   "ENSG00000187634.6";
chr1    861264  866445  -   "ENSG00000268179.1";
chr1    879584  894689  -   "ENSG00000188976.6";
chr1    895967  901095  +   "ENSG00000187961.9";

我通过解析 GTF 文件生成

如果可能的话,我想使用 awk 或 sed 删除第 5 列中的 和";结果如下:

chr1    134901  139379  -   ENSG00000237683.5
chr1    860260  879955  +   ENSG00000187634.6
chr1    861264  866445  -   ENSG00000268179.1
chr1    879584  894689  -   ENSG00000188976.6
chr1    895967  901095  +   ENSG00000187961.9

答案1

使用gsub:

awk '{gsub(/\"|\;/,"")}1' file
chr1    134901  139379  -   ENSG00000237683.5
chr1    860260  879955  +   ENSG00000187634.6
chr1    861264  866445  -   ENSG00000268179.1
chr1    879584  894689  -   ENSG00000188976.6
chr1    895967  901095  +   ENSG00000187961.9

如果你想经营仅有的在第五个字段上并保留其他字段中的所有引号或分号:

awk '{gsub(/\"|\;/,"",$5)}1' file 

答案2

如果您的数据格式完全如图所示(即没有其他";在其他列中需要保留),那么您可以简单地使用tr删除这些字符:

tr -d '";' < input.txt > output.txt

答案3

使用 sed 删除 '";' 的所有实例: sed -i 's/[";]//g' file

仅从第五列中删除 sed 可能不是最好的选择。

答案4

一个 sed 解决方案,确保我们只摆弄第五列:

sed -E 's/^(([^ ]+ +){4})"([^"]+)";$/\1\3/' infile
chr1    134901  139379  -   ENSG00000237683.5
chr1    860260  879955  +   ENSG00000187634.6
chr1    861264  866445  -   ENSG00000268179.1
chr1    879584  894689  -   ENSG00000188976.6
chr1    895967  901095  +   ENSG00000187961.9

这在没有 ERE(-E-r某些较旧的 sed)的情况下也可以工作,但需要更多的反斜杠。+根据 POSIX 规范1, -量词仅是 ERE ,并且可以替换为{1,}(或\{1,\}用于 BRE)。

如果列不是用空格分隔的,则可以用 POSIX 字符类替换空格[:blank:]以也匹配制表符。

正则表达式详细信息:

^               # Anchored at start of line
(               # Capture group 1 for first 4 columns
    (           # Capture group 2 for repeat count
        [^ ]+   # 1 or more non-spaces
         +      # 1 or more spaces
    ){4}        # 4 times "word plus spaces" (columns)
)               # End capture group 1
"               # Column 5 starts with double quote (not captured)
(               # Capture group 3 for column 5
    [^"]+       # One or more non-quote characters
)               # End capture group 3
";              # Quote and semicolon at end of column 5
$               # Anchored at end of line

1 GNU sed 作为扩展,\+也允许在 BRE 中使用。

相关内容