удаление строк с определенными полями в linux

У меня есть файл с разделителями табуляции, который имеет 20 столбцов и 40 строк.

missense 
nonsense
5' UTR
3' UTR

поэтому они находятся в столбце 9, и я прошу, чтобы в моем выводе оставались только строки с определенными значениями, но при выполнении этого я ничего не получаю в выводе. Поэтому, если значение является миссенс или бессмысленным, сохраните эти строки, иначе удалите их.

awk -F"\t" '$9 == "missense" || $9 == "nonsense" ' input > output 

я тоже пробовал

awk -F"\t" '$9 == "missense"' || ' $9 == "nonsense" ' input > output 

все ответы приходят с 0 байтами.


person user3461930    schedule 01.04.2014    source источник
comment
ваша первая строка должна работать, есть ли у вашего $9 начальный/конечный пробел? попробуйте print $9 посмотреть, проверяли ли вы правильный столбец.   -  person Kent    schedule 01.04.2014


Ответы (2)


Рассмотрите возможность использования совпадения вместо равенства:

awk -F"\t" '$9 ~ "missense" || $9 ~ "nonsense" ' input > output

Это не лучший выбор, если вы хотите исключить из вывода «this-missense-too», но в противном случае избегаете проблем с начальными или конечными пробелами и т. д.

person Jonathan Leffler    schedule 01.04.2014

Похоже, в вашем файле есть пробелы и табуляции. Попробуй это:

awk -F'[[:space:]]+' '$9 == "missense" || $9 == "nonsense"' input > output
person jaypal singh    schedule 01.04.2014