2013-10-31 7 views
8

第3列に「同義語」を含む行を除外します。コマンドはAWKを使用してCSVファイルをフィルタリングする

awk '$3 !~ /^synonymous/' fileCSV.csv > fileCSV2.csv 

以下のようなものです。しかしfileCSV2.csvは、まだ第三欄に単語「同義語」が含まれています。何が間違っているのだろうか?

fileCSV.csvから2本の線:

"exonic","LINC00115","synonymous SNV","uc010nxx.2:c.C299T:p.P100L",,"0.99",,0.56,rs3115849,,,,,,,,,,,,,chr1,762273,762273,G,A,"chr1","762273",".","G","A","30483.62","PASS","AC=24;AF=1.00;AN=24;DP=2972;FS=0.000;MLEAC=8;MLEAF=1.00;MQ0=0;VQSLOD=19.50;culprit=FS;set=Intersection","GT:AD:DP:GQ:PL","1/1:0,2:2:6:66,6,0","1/1:0,297:297:99:10476,951,0","1/1:0,304:304:99:10098,950,0","1/1:0,295:295:99:9869,929,0","1/1:0,292:292:99:8655,895,0","1/1:0,304:304:99:10006,965,0","1/1:0,179:179:99:5862,568,0","1/1:0,273:273:99:9328,851,0","1/1:0,279:279:99:7946,850,0","1/1:0,283:283:99:9214,866,0","1/1:0,8:8:21:229,21,0","1/1:0,456:456:99:16385,1285,0"  
"exonic","SAMD11","synonymous SNV","uc001abw.1:c.T1027C:p.W343R","559;Name=lod=249",,,1.00,rs6672356,1,0.916445,N,0.0,T,0.0,B,0.998605,N,4.19E-4,N,3.17,chr1,877831,877831,T,C,"chr1","877831",".","T","C","3594.56","PASS","AC=24;AF=1.00;AN=24;DP=387;FS=0.000;MLEAC=8;MLEAF=1.00;MQ=60.00;MQ0=0;VQSLOD=15.00;culprit=DP;set=Intersection","GT:AD:DP:GQ:PL","1/1:0,3:3:9:97,9,0","1/1:0,3:3:12:113,12,0","1/1:0,64:64:99:1805,189,0","1/1:0,57:57:99:1605,168,0","1/1:0,30:30:90:768,90,0","1/1:0,69:69:99:2026,216,0","1/1:0,15:15:45:428,45,0","1/1:0,23:23:81:809,81,0","1/1:0,22:22:69:562,69,0","1/1:0,40:40:99:1142,117,0","1/1:0,3:3:9:94,9,0","1/1:0,58:58:99:14,7,0" 
+1

私たちに 'fileCSV.csv'からいくつかの行を表示してください – rzymek

+0

' fileCSV.csvの中に何を入れるのが良いでしょうか? '' fileCSV2.csv'に何を期待しますか – Masster

+0

はい、「同義語」の後に言葉(可変)がありますが、同義語は3列目の最初の単語です – TonyGW

答えて

9

あなたfileCSV.csvは列がある場合-Fawkのバージョンでは動作しない場合は、

awk -F, '$3 !~ /^synonymous/' fileCSV.csv > fileCSV2.csv 

に必要以上,で区切ら試してみてください

awk 'BEGIN{FS=","} $3 !~ /^synonymous/' fileCSV.csv > fileCSV2.csv 

EDIT:あなたも考慮に"を取る必要があるので、私はsedを持つ、すなわち前処理の引用符、自動的に考慮して、以下の方法を好むのawkを使用してCSVファイルを処理するには/^"synonymous/

+0

awk:ファイルfileCSV.csvを開くことができません ソース行麻痺er 1 – TonyGW

+0

ああ、おそらく '-F'は' gawk'拡張です。 – rzymek

+0

更新されたと同じエラーが更新されました。 – TonyGW

2

を使用しています。私はあなたにも正しく(CSVファイルに二重引用符で表されます)引用符を含む文字列フィールドを持つファイルを処理する場合は、変更する必要が

sed -e 's/^"//;s/"$//' fileCSV.csv | awk -F '"?,"?' '$3 !~ /^synonymous/' 

を使用することになり、あなたの具体的な質問については

sed -e 's/^"//;s/"$//;s/""/"/g' fileCSV.csv | awk -F '"?,"?' '$3 !~ /^synonymous/' 

この方法は、awkを使用していくつかのフィールドを正しく印刷または処理できるという利点があります。あなたは、フィルタリングラインから第一及び第5フィールドを印刷する場合の方法との違いは、あなたに明確でない場合たとえば、あなたが今

sed -e 's/^"//;s/"$//;s/""/"/g' fileCSV.csv | awk -F '"?,"?' '$3 !~ /^synonymous/ { print $1,":",$5}' 

を使用することができます:で区切り(、あなたは最後を試すことができますawakeコマンドでsedの前処理なし)

関連する問題