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

Sys*_*tem 9 sed awk text-processing

我有这样的数据:

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";
Run Code Online (Sandbox Code Playgroud)

我通过解析 GTF 文件生成

如果可能,我想使用 awk 或 sed 从第 5 列中删除"'s 和;'s。结果如下所示:

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
Run Code Online (Sandbox Code Playgroud)

jas*_*yan 9

使用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
Run Code Online (Sandbox Code Playgroud)

如果你想操作在第五场和保存在其他领域的任何报价或分号:

awk '{gsub(/\"|\;/,"",$5)}1' file 
Run Code Online (Sandbox Code Playgroud)

  • 为什么不直接使用字符类?在我看来,`/[;"]/` 比 `/\"|\;/` 更具可读性和简单性。 (2认同)

Dig*_*uma 6

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

tr -d '";' < input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)


Dan*_*i_l 5

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

仅从第 5 列 sed 中删除可能不是最佳选择。