Domanda

Usando Awk voglio abbinare il intero usando un'espressione regolare. Per impostazione predefinita, la corrispondenza dell'espressione regolare è per parti di un record.

La soluzione ideale sarebbe:

  • Sii generale per tutti i campi, indipendentemente dal separatore di campo utilizzato.
  • Non considera l'intero input come un singolo campo e analizzalo manualmente usando le funzioni stringa.
  • Lavora in modo generale e non essere specifico di gawk per esempio.

Tuttavia, tutte le soluzioni sono interessanti fintanto che utilizzano Awk senza chiamate a programmi esterni .

Un esempio, ho:

$ ls
indata.txt  t1.awk
$ cat indata.txt 
a1010_
1010_
1010_b
$ cat t1.awk 
/[01]*_[01]*/ { print 
$ awk -f t1.awk indata.txt
a1010_
1010_
1010_b
}

Ottengo:

$ awk -f t1.awk indata.txt
1010_

Questo è il risultato che sto cercando:

<*>
È stato utile?

Soluzione

Devi solo aggiungere un punto di inizio e fine alla tua regex:

/^[01]*_[01]*$/ { print <*> }

Altri suggerimenti

$ gawk '/^[01]*_[01]*$/' indata.txt
1010_
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top