linux - 如果第 n 列包含特定单词,如何删除行?
问题描述
chr1 26150023 26150023 ncRNA_exonic
chr1 26162313 26162313 exonic
chr1 26349533 26349535 exonic
chr1 26357656 26357656 UTR5
chr1 26487940 26487940 exonic
chr1 26150023 26150023 ncRNA_exonic
chr1 26162353 26162313 splicing
chr1 26349533 26349535 exonic;splicing
chr1 26357656 26357656 exonic
chr1 26487940 26487940 UTR3
chr1 26357656 26357656 intronic
chr1 26487940 26487940 intergenic
我有一个非常大的 csv 文件,它包含数十列和数千行。如果这些行的第 4 列包含除 exonic、exonic、splicing、splicing 之外的任何字符串,我想删除这些行。
删除我的文件后将如下所示:
chr1 26162313 26162313 exonic
chr1 26349533 26349535 exonic
chr1 26487940 26487940 exonic
chr1 26162353 26162313 splicing
chr1 26349533 26349535 exonic;splicing
chr1 26357656 26357656 exonic
我尝试使用 sed 但它删除了不需要的行。例如,如果我在第 10 列中有 UTR3,它也会删除该行,我不希望这样。我使用了这个命令:
sed -e '/upstream/d' -e '/downstream/d' -e '/intronic/d' -e '/intergenic/d' -e '/ncRNA_exonic/d' -e '/ncRNA_intronic/d' -e '/ncRNA_splicing/d' -e '/ncRNA_UTR5/d' -e '/UTR3/d' -e '/UTR5/d' input.csv > output.csv
反正我能得到这个工作吗?
提前致谢
解决方案
使用 awk 和正则表达式来测试第 4 列。
awk '$4 ~ "^(exonic|exonic;splicing|splicing)$"' file
输出:
chr1 26162313 26162313 外显子 chr1 26349533 26349535 外显子 chr1 26487940 26487940 外显子 chr1 26162353 26162313 拼接 chr1 26349533 26349535 外显子;剪接 chr1 26357656 26357656 外显子
推荐阅读
- node.js - 如何检测 HDMI 设备是否与 Node JS 连接?
- android - 上传到服务器后如何删除图像/文档。?
- angular - HighMaps 从列表中选择地图 - Highcharts.geojson 和 Highcharts.mapDataIndex 问题
- amazon-web-services - 当我的密钥有空格时出现 AWS S3 CLI 错误
- angular - 从 nginx 服务器而不是 environment.ts 文件访问环境变量
- excel - 应用程序用户名错误的 Excel/VBA 问题
- macos - 如何在 macOS 上捕获 intel-pt 数据包
- javascript - Knp/Snappy PDF 生成器空白页
- python - 如何在 matplotlib 图上叠加 seaborn 热图
- angular - 如何在 Html5 视频标签中设置质量选项