Ich habe zwei durch Kommas getrennte CSV-Dateien (section_ne_lookup.csv und section_fru_out.csv):
-sh-4.1$ cat section_ne_lookup.csv
CIBI_NMS_NE,,,,,,,,,,,,,,,,,,,,,,,
D,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,r,s,t,u,v,w
X,NE1,1.1.1.1,,833-006355,00,Windows,,,9.4.04,301035,,,,,,,,,,,,,
X,NE2,2.2.2.2,,833-006352,00,XS-A,,,5.1,51.573,,,,,,,,,,,,,
X,80,3.3.3.3,,833-006366,00,XS-F,,,5.2,52.604,,,,,,,,,,,,,
X,83,4.4.4.4,,833-006366,00,XS-F,,,5.3,53.575,,,,,,,,,,,,,
X,85,5.5.5.5,,833-006352,00,XS-A,,,5.3,53.605,,,,,,,,,,,,,
X,87,6.6.6.6,,Dummy_EPLC60,Dummy_EPLR60,XS-A,,,5.3,53.543,,,,,,,,,,,,,
-sh-4.1$ cat section_fru_out.csv
CIBI_NMS_FRU,,,,,,,,,,,,,,,,,,,,,,,
D,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,r,s,t,u,v,w,x,y
X,UNKNOWN,0,NE2,,,,NE2:klm11,,,,UNKNOWN,,,,,,,0,,,,,,
X,UNKNOWN,0,NE2,,,,NE2:klm12,,,,UNKNOWN,,,,,,,0,,,,,,
X,UNKNOWN,0,NE2,,,,NE2:klm13,,,,UNKNOWN,,,,,,,0,,,,,,
X,UNKNOWN,0,NE2,,,,NE2:klm14,,,,UNKNOWN,,,,,,,0,,,,,,
X,UNKNOWN,0,NE2,,,,NE2:klm15,,,,UNKNOWN,,,,,,,0,,,,,,
X,UNKNOWN,0,NE2,,,,NE2:klm16,,,,UNKNOWN,,,,,,,0,,,,,,
X,UNKNOWN,0,NE2,,,,NE2:klm2,,,,UNKNOWN,,,,,,,0,,,,,,
X,UNKNOWN,0,NE2,,,,NE2:klm3,,,,UNKNOWN,,,,,,,0,,,,,,
X,UNKNOWN,0,NE2,,,,NE2:klm4,,,,UNKNOWN,,,,,,,0,,,,,,
X,UNKNOWN,0,NE2,,,,NE2:klm5,,,,UNKNOWN,,,,,,,0,,,,,,
X,UNKNOWN,0,NE2,,,,NE2:klm6,,,,UNKNOWN,,,,,,,0,,,,,,
X,UNKNOWN,0,NE2,,,,NE2:klm7,,,,UNKNOWN,,,,,,,0,,,,,,
X,UNKNOWN,0,NE2,,,,NE2:klm8,,,,UNKNOWN,,,,,,,0,,,,,,
X,UNKNOWN,0,NE2,,,,NE2:klm9,,,,UNKNOWN,,,,,,,0,,,,,,
X,abc,0,83,,,,83:klm1,,,,rty,,,,,,,0,,,,,,
X,UNKNOWN,0,80,,,,80:klm2,,,,UNKNOWN,,,,,,,0,,,,,,
X,UNKNOWN,0,80,,,,80:klm3,,,,UNKNOWN,,,,,,,0,,,,,,
X,UNKNOWN,0,80,,,,80:klm4,,,,UNKNOWN,,,,,,,0,,,,,,
X,UNKNOWN,0,80,,,,80:klm5,,,,UNKNOWN,,,,,,,0,,,,,,
X,UNKNOWN,0,80,,,,80:klm6,,,,UNKNOWN,,,,,,,0,,,,,,
X,UNKNOWN,0,80,,,,80:klm7,,,,UNKNOWN,,,,,,,0,,,,,,
X,UNKNOWN,0,80,,,,80:klm8,,,,UNKNOWN,,,,,,,0,,,,,,
X,TBD,1,NE2,,,,NE2:klm4.asd1,,,,bnm,,,,,,,0,,,,,,0000
X,TBD,1,80,,,,80:.klm1.asd1,,,,bnm,,,,,,,0,,,,,,3132
X,abc,1,87,,,,87:ab1,,,,,,,,,,,0,,,,,,xyz-C
X,abc,0,87,,,,87:abA,,,,bnm,,,,,,,0,,,,,,xyz-A
Was ich tun möchte, ist: Wenn die 5. oder 6. Spalte von section_ne_lookup.csv mit der Phrase „Dummy_“ beginnt, holen Sie den Wert der 2. Spalte der übereinstimmenden Zeile. Und prüfen Sie, ob dieser abgerufene Wert (2. Spalte der übereinstimmenden Zeile in section_ne_lookup.csv) in der 4. Spalte von section_fru_out.csv vorhanden ist. Wenn ja, entfernen Sie die übereinstimmende Zeile aus section_fru_out.csv. Wenn nein, behalten Sie die übereinstimmende Zeile in section_fru_out.csv. Basierend auf dieser Regel sollten folgende Zeilen entfernt werden:
X,abc,1,87,,,,87:ab1,,,,,,,,,,,0,,,,,,xyz-C
X,abc,0,87,,,,87:abA,,,,bnm,,,,,,,0,,,,,,xyz-A
Denn die 5. und 6. Spalte der letzten beiden Zeilen in section_ne_lookup.csv beginnen mit Dummy_phrase. Daher sollten wir die zweite Spalte (in diesem Fall 87) der übereinstimmenden Zeile abrufen und in der 4. Spalte der Datei: section_fru_out.csv nach diesem Wert (87) suchen. Da die letzten beiden Zeilen dieser Datei dieser Regel entsprechen, sollten diese Zeilen entfernt werden.
Wie kann ich das machen?
Antwort1
Das hier sollte tun, was Sie brauchen:
awk -F, '{
if(NR==FNR){a[$2]=$5; b[$2]=$6;}
else if(a[$4] !~ /^Dummy/ && b[$4] !~ /^Dummy/){print}
}' section_ne_lookup.csv section_fru_out.csv
if(NR==FNR){a[$2]=$5; b[$2]=$6;}
:FNR
ist die Zeilennummer der aktuellen Eingabedatei undNR
ist die Zeilennummer aller Eingaben. Wenn sie gleich sind, lesen wir die erste Datei. Dann erstellen wira
assoziativeb
Arrays, deren Schlüssel die zweiten Felder und deren Werte das 5. bzw. 6. sind.else if (a[$4] !~ /^Dummy/ && b[$4] !~ /^Dummy/){print}
: Wenn dies nicht die 1. Datei ist und weder das 4. noch das 5. Feld der Zeile, die mit dem 2. Feld verknüpft ist,section_ne_lookup.csv
mit beginntDummy
, dann drucke die Zeile.