Вывести, если поле начинается с указанной строки c с использованием awk - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть такой список в файле chrs.txt:

chr22
chr21
chrUn_gl000225
chrUn_gl000222
chrM 

желаемый результат:

chr22
chr21

Я хочу напечатать строки, если они не содержат chrM и chrUn. Поэтому я хочу отфильтровать строки chrM и строки, включая chrUn. Для этого я попробовал коды ниже, но я мог фильтровать только chrM.

awk '($1 != "chrM" && $1 != "chrUn")' chrs.txt
awk '($1 != "chrM" && $1 != "/^chrUn/")' chrs.txt
awk '($1 != "chrM" && $1 != "chrUn_*")' chrs.txt

Если вы могли бы помочь, я буду признателен.

Ответы [ 4 ]

2 голосов
/ 10 февраля 2020

Также это может делать grep.

grep -Ev '^chr(Un|M)' file

GNU ed (1)

printf '%s\n' 'v/^chr\(Un\|M\)/p' | ed -s file
1 голос
/ 10 февраля 2020

В bash вы можете сделать сравнение следующим образом (при условии, что line содержит одну строку файла, т.е. я исключил l oop над строками файла здесь):

if [[ $line != chrUn* ]] && [[ $line != chrM* ]]; then
    echo $line
fi;
1 голос
/ 10 февраля 2020

awk:

awk '$0!~/^chr(Un|M)/'

sed:

sed -rne '/^chr(Un|M)/!p'

grep:

grep -Ev "^chr(Un|M)"

bash:

for LINE in $(<your_file.txt); do [[ $LINE =~ ^chr(Un|M) ]] || echo $LINE ; done

You следует использовать одну из первых трех опций, так как они более переносимы в другой оболочке.

1 голос
/ 10 февраля 2020

все что вам нужно это:

awk '!/^chr(Un|M)/' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...