Ho un file1, che ha poche righe (decine) e un file2 molto più lungo (~ 500.000 righe). Le linee in ogni file non sono identiche, sebbene esista un sottoinsieme di campi identici. Voglio prendere i campi 3-5 da ogni riga in file1 e cercare file2 per lo stesso modello (solo quei tre campi, nello stesso ordine - in file2, rientrano nei campi 2-4). Se viene trovata una corrispondenza, desidero eliminare la riga corrispondente da file1.awk/sed/grep per eliminare righe corrispondenti ai campi in un altro file
esempio, file1:
2016-01-06T05:38:31 2016-01-06T05:23:33 2016006 120E A TM Current
2016-01-06T07:34:01 2016-01-06T07:01:51 2016006 090E B TM Current
2016-01-06T07:40:44 2016-01-06T07:40:41 2016006 080E A TM Alt
2016-01-06T07:53:50 2016-01-06T07:52:14 2016006 090E A TM Current
2016-01-06T08:14:45 2016-01-06T08:06:33 2016006 080E C TM Current
file2:
2016-01-06T07:35:06.87 2016003 100E C NN Current 0
2016-01-06T07:35:09.97 2016003 100E B TM Current 6303
2016-01-06T07:36:23.12 2016004 030N C TM Current 0
2016-01-06T07:37:57.36 2016006 090E A TM Current 399
2016-01-06T07:40:29.61 2016006 010N C TM Current 0
... (e per 500.000 linee)
Quindi, in questo caso, voglio cancellare la quarta linea di file1 (sul posto).
Di seguito trova le righe voglio eliminare:
grep "$(awk '{print $3,$4,$5}' file1)" file2
Così una soluzione può essere quella di un tubo da questa a sed, ma sono poco chiaro come impostare un modello di corrispondenza in sed da un ingresso in filodiffusione. E la ricerca online suggerisce che awk può probabilmente fare tutto questo (o forse sed, o qualcos'altro), chiedendosi come sarebbe una soluzione pulita.
Inoltre, la velocità è un po 'importante perché altri processi possono tentare di modificare i file mentre questo è in corso (so che questo potrebbe presentare più complicazioni ...). Le corrispondenze si trovano generalmente alla fine del file2, non all'inizio (nel caso in cui ci sia un modo per cercare file2 dal basso verso l'alto).
pluse-uno per il problema descritto in modo eccellente. Continua a postare e buona fortuna. – shellter