Awk:有条件的恢复线

Awk:有条件的恢复线,awk,grep,Awk,Grep,我想从另一个文件创建一个文件,只保留一些与列中的模式匹配的行 基本文件的一部分: "1","rs543921925","ENSG00000187634","ENST00000616125","intron_variant" "2","rs543921925","ENSG00000187634","ENST00000620200","intron_variant" "3","rs543921925","ENSG00000187634","ENST00000617307","intron_varia

我想从另一个文件创建一个文件,只保留一些与列中的模式匹配的行

基本文件的一部分:

"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

但是它不起作用。

你可以自己轻松地解决这个问题:

$ 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 <>

$awk-F''NR==1{for(i=1;i你可以自己轻松地解决这个问题:

$ 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 <>

$awk-F'''NR==1{for(i=1;i我认为有时最好使用实际的文件分隔符

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

可能是您想要的。

我认为有时最好使用实际的文件分隔符

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

这可能是您想要的。

的确
awk
脚本可以实现这一点,但是
grep
更简单

您的脚本错误是字段分隔符:

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

但grep更简单

grep "missense_variant\"$" input.txt

事实上,
awk
script可以做到这一点,但是
grep
更容易、更简单

您的脚本错误是字段分隔符:

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

但grep更简单

grep "missense_variant\"$" input.txt

谢谢你所有的建议,它们很好用,我看最适合我的问题的建议谢谢你,它们很好用,我看最适合我的问题的建议谢谢你把$9~/missense\u variant/
改成$10~/missense\u variant/
,但是在此之前,在orignial命令中尝试打印
$9
,看看它是什么。您将意识到它永远不会匹配
missense\u variant
。对,因为第一个“是$1”之前的空字符串,您也可以使用
grep'“missense\u variant”$
,并且在awk命令中,您可以忽略
{print$0}
--谢谢你,的确,我太快了,看不出哪一列是正确的。每一行都以“开始”开头,这让我很难受。感谢您对我的粗心大意给予了启发。将
'$9~/missense\u variant/
更改为
'$10~/missense\u variant/
,但在此之前,请在orignial命令中尝试打印
$9
,然后查看它是什么。您将意识到它永远不会匹配
missense\u variant
。对,因为fir之前的空字符串st是$1你也可以使用
grep'missense\u variant“$”
,在你的awk命令中,你可以省略
{print$0}
——谢谢你,确实,我太快了,我没有看到哪一列是正确的。我很难理解每一行的开头都是“。感谢您对我的粗心给予启发。请投票选出有价值的答案,并在最佳答案上打分。请投票选出有价值的答案,并在最佳答案上打分。