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-й столбец этих строк содержит любую строку, кроме экзонической, экзонической, сплайсинга, сплайсинга.
После удаления мой файл будет выглядеть так:
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, но он удаляет ненужные строки. Например, если у меня есть UTR3 в 10-м столбце, он также удалит эту строку, а я этого не хочу. Я использовал эту команду:
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 exonic chr1 26349533 26349535 exonic chr1 26487940 26487940 exonic chr1 26162353 26162313 splicing chr1 26349533 26349535 exonic;splicing chr1 26357656 26357656 exonic
Чтобы печатать всегда первой строкой, замените $4
на NR == 1 || $4
.
Спасибо. Меня устраивает. Я использую файл csv, и мои строки разделены запятой. Так что мне тоже пришлось добавить
-F','
. Я хочу исключить первую строку. Я забыл упомянуть об этом в своем вопросе. Итак, как я могу это сделать?