Awk: линия восстановления с условием - PullRequest
0 голосов
/ 20 июня 2019

Я хотел бы создать файл из другого файла, сохранив в столбце только несколько строк, соответствующих шаблону.

Часть базового файла:

"1","rs543921925","ENSG00000187634","ENST00000616125","intron_variant"
"2","rs543921925","ENSG00000187634","ENST00000620200","intron_variant"
"3","rs543921925","ENSG00000187634","ENST00000617307","intron_variant"
"4","rs146327803","ENSG00000187634","ENST00000420190","missense_variant"
"5","rs146327803","ENSG00000187634","ENST00000437963","missense_variant"
"6","rs146327803","ENSG00000187634","ENST00000342066","missense_variant"
"7","rs146327803","ENSG00000187634","ENST00000618181","missense_variant"

Файл, которыйЯ хочу:

"4","rs146327803","ENSG00000187634","ENST00000420190","missense_variant"
"5","rs146327803","ENSG00000187634","ENST00000437963","missense_variant"
"6","rs146327803","ENSG00000187634","ENST00000342066","missense_variant"
"7","rs146327803","ENSG00000187634","ENST00000618181","missense_variant"

Я пробовал:

awk -F'"' '$9 ~ /missense_variant/ { print $0 }'base_file.txt

Но это не работает.

Ответы [ 5 ]

2 голосов
/ 20 июня 2019

Я думаю, что иногда лучше использовать фактические разделители файлов.

$ awk -F, '$NF=="\"missense_variant\"" base_file.txt

, вероятно, то, что вы хотели.

0 голосов
/ 22 июня 2019

Спасибо за все ваши предложения, они работают очень хорошо, я смотрю на тот, который больше всего подходит для моей проблемы спасибо

0 голосов
/ 20 июня 2019
awk '/missense_variant/{print $0}' file

"4","rs146327803","ENSG00000187634","ENST00000420190","missense_variant"
"5","rs146327803","ENSG00000187634","ENST00000437963","missense_variant"
"6","rs146327803","ENSG00000187634","ENST00000342066","missense_variant"
"7","rs146327803","ENSG00000187634","ENST00000618181","missense_variant"
0 голосов
/ 20 июня 2019

Действительно, awk скрипт может добиться цели, но grep проще и проще.

Ваша ошибка скрипта - разделитель полей:

awk -F',' '$5 ~ /missense_variant/ { print }' base_file.txt

хорошо работает

но grep проще

grep "missense_variant\"$" input.txt
0 голосов
/ 20 июня 2019

Вы могли бы легко понять это для себя:

$ awk -F'"' 'NR==1{for (i=1; i<=NF; i++) print NF, i, "<" $i ">"}' file
11 1 <>
11 2 <1>
11 3 <,>
11 4 <rs543921925>
11 5 <,>
11 6 <ENSG00000187634>
11 7 <,>
11 8 <ENST00000616125>
11 9 <,>
11 10 <intron_variant>
11 11 <>

Обратите внимание, что в $ 9 против $ 10.

Кроме того, рассмотрите это для FS вместо:

$ awk -F'^"|","|"$' 'NR==1{for (i=1; i<=NF; i++) print NF, i, "<" $i ">"}' file
7 1 <>
7 2 <1>
7 3 <rs543921925>
7 4 <ENSG00000187634>
7 5 <ENST00000616125>
7 6 <intron_variant>
7 7 <>

или:

$ awk -F'","' '{gsub(/^"|"$/,"")} NR==1{for (i=1; i<=NF; i++) print NF, i, "<" $i ">"}' file
5 1 <1>
5 2 <rs543921925>
5 3 <ENSG00000187634>
5 4 <ENST00000616125>
5 5 <intron_variant>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...