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
反正我能得到这份工作吗?
预先感谢
答案 0 :(得分:4)
使用awk和正则表达式测试第4列。
awk '$4 ~ "^(exonic|exonic;splicing|splicing)$"' file
输出:
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