2013-10-31 13 views
8

Ich möchte die Zeilen herausfiltern, die "auch" in der 3. Spalte stehen. Der Befehl ist wie untenAWK zum Filtern von CSV-Dateien

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

Aber die fileCSV2.csv enthält noch das Wort „auch“ in der dritten Spalte. Ich frage mich, was könnte falsch sein?

Zwei Zeilen aus dem fileCSV.csv:

"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

Zeigen Sie uns ein paar Zeilen von 'fileCSV.csv' – rzymek

+0

Es wäre besser, wenn Sie setzen, was in' DateiCSV.csv' ist und was erwarten Sie in 'DateiCSV2.csv' – Masster

+0

ja, weil es nach "auch" Wörter gibt (variabel), aber auch das erste Wort in der 3. Spalte – TonyGW

Antwort

9

Wenn Ihr fileCSV.csv durch , getrennt Spalten als Sie

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

brauchen Wenn -F nicht mit Ihrer Version von awk funktioniert versuchen

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

EDIT: Sie müssen auch " berücksichtigen, so /^"synonymous/

+0

zeigt es an: awk: Datei kann nicht geöffnet werden fileCSV.csv source line tumb er 1 – TonyGW

+0

Oh, wahrscheinlich '-F' ist eine' gawk' Erweiterung. Aktualisiert – rzymek

+0

immer noch der gleiche Fehler mit dem aktualisierten. – TonyGW

2

verwenden, um CSV-Datei mit awk verarbeiten würde ich die folgende Methode bevorzugt automatisch für Anführungszeichen-Konto, nämlich Vorprozess mit sed.

Für Ihre konkrete Frage würde ich

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

verwenden Wenn Sie auch Dateien korrekt verarbeiten wollen mit String-Felder enthalten Anführungszeichen (die durch doppelte Anführungszeichen in CSV-Dateien dargestellt werden), müssen Sie ändern sed Ausdruck der folgenden Art und Weise,

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

Diese Methode hat den Vorteil, dass es Sie awk korrekt drucken oder einige Felder verarbeiten Verwendung erlaubt. Wenn Sie zum Beispiel die erste und fünfte Feld aus den gefilterten Zeilen durch eine : getrennt drucken möchten, können Sie jetzt

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

(Wenn die Differenz zwischen den Methoden nicht klar, Sie ist, können Sie die letzte versuchen awk Befehl ohne sed preprocessing)

Verwandte Themen