Wie kann ich nur einige Felder aus einer CSV-Textzeile extrahieren

Wie kann ich nur einige Felder aus einer CSV-Textzeile extrahieren

Ich brauche Hilfe, um einen Weg zu finden, mit Linux-Befehlen bestimmte Informationen der folgenden Zeilen zu extrahieren.

391,(INSIDE-A),to,(OUTSIDE-A),source,static,SRV_I_N1909,SRV_NAT_I_N1909,destination,static,REDE_AMX_MCK,REDE_AMX_MCK,translate_hits=4399,untranslate_hits=4413
431,(INSIDE-A),to,(OUTSIDE-A),source,static,WK_I_5.5.4.56,SRV_NAT_10.9.3.212,translate_hits=284903,untranslate_hits=8472
432,(INSIDE-A),to,(OUTSIDE-A),source,dynamic,GRP_WKS_HOSTS_,WK_NAT_10.9.7.229,destination,static,G_SRV_ENG_CL,G_SRV_E_CL,translate_hits=0,untranslate_hits=0
436,(INSIDE-A),to,(OUTSIDE-A),source,static,SRV_I_ND007,NAT_10.9.4.238,destination,static,R_MCK,R_MCK,translate_hits=1966,untranslate_hits=1966
437,(INSIDE-A),to,(OUTSIDE-A),source,static,WK_I_5.8.104.120,NAT_A_10.9.7.245,translate_hits=84908,untranslate_hits=1965
440,(INSIDE-A),to,(OUTSIDE-A),source,dynamic,REDE_NET1,NAT_A_10.9.7.247,destination,static,SRV_BT_10.3.33.9,SRV_BT_10.3.33.9,translate_hits=18970,untranslate_hits=18970

Wie Sie sehen, sind die Zeilen unterschiedlich, gewünschte Informationen:

440, translate_hits=18970,untranslate_hits=18970

Antwort1

Sie können Folgendes versuchen:

grep -o "^[0-9]*\|,tran.*$" file | sed 'N;s/\n,/,/'

Ausgabe:

391,translate_hits=4399,untranslate_hits=4413
431,translate_hits=284903,untranslate_hits=8472
432,translate_hits=0,untranslate_hits=0
436,translate_hits=1966,untranslate_hits=1966
437,translate_hits=84908,untranslate_hits=1965
440,translate_hits=18970,untranslate_hits=18970

Antwort2

Vorausgesetzt, in keinem Feld der Datei ist ein Komma oder ein Zeilenumbruchzeichen eingebettet (es handelt sich also um eine „einfache CSV-Datei“), können Sie die ersten und die letzten beiden Felder jeder Zeile mit

$ awk -F , 'BEGIN { OFS=FS } { print $1, $(NF-1), $NF }' file.csv
391,translate_hits=4399,untranslate_hits=4413
431,translate_hits=284903,untranslate_hits=8472
432,translate_hits=0,untranslate_hits=0
436,translate_hits=1966,untranslate_hits=1966
437,translate_hits=84908,untranslate_hits=1965
440,translate_hits=18970,untranslate_hits=18970

NFist eine spezielle Variable, die die Anzahl der Felder in jeder Zeile enthält, und wir setzen sowohl als Eingabe- als auch als Ausgabefeldtrennzeichen ein Komma. Im printBlock drucken wir nur die Felder, die uns interessieren.

verwandte Informationen