Ho un file con i record che sono di forma:ricerca awk su più campi di un file di registrazione multilinea
SMS-MT-FSM-DEL-REP
country: IN
1280363645.979354_PFS_1_1887728354
SMS-MT-FSM-DEL-REP
country: IN
1280363645.729309_PFS_1_1084296392
SMS-MO-FSM
country: IR
1280105721.484103_PFM_1_1187616097
SMS-MO-FSM
country: MO
1280105721.461090_PFM_1_882824215
Ciò si presta ad analisi tramite awk usando qualcosa come: awk 'BEGIN {FS = "\ n"; RS = ""} /country:.*MO/ {print $ 0} '
La mia domanda è: come utilizzare awk per cercare i record in 2 campi separati? Ad esempio, desidero solo stampare i record che hanno un paese di MO E chi registra la prima linea è SMS-MO-FSM?
Controllare con le corrispondenze di espressioni regolari indesiderate (come 'paese: SMO'). Vorrei usare il confronto delle stringhe ogni volta che è possibile e ancorare tutte le regex. – schot
grazie, ma mi chiedo se potresti rispondere (probabilmente molto semplice) oltre all'ultima domanda. Vorrei stampare il risultato su una riga (per piping in sort | uniq)> Ho eseguito il tuo codice e ha funzionato benissimo (grazie) ma quando ho impostato OFS su "" (spazio) i campi del record sono ancora usciti su diverse linee. Che cosa sto facendo di sbagliato? Ecco il mio codice: awk 'BEGIN {FS = "\ n"; RS = ""; OFS = "";} $ 2 ~/paese: MO $/&& $ 1 ~/SMS-MO-FSM/{stampa $ 0} 'testFile.txt – adaptive
quando si esegue il piping per ordinare, è necessario newlines .. non so come rispondi alla tua domanda dal momento che non fornisci informazioni sufficienti sui tuoi dati. prova l'impostazione OFS = "\ n" e vedi. – ghostdog74