Pattern cerca l'input dell'utente in un file in Unix usando awk


0

Sto cercando di scrivere uno script awk per cercare un modello che è stato immesso dall'utente in un file.
Il mio codice è simile al seguente:
awk 'BEGIN{printf "Enter : ";getline input<"/dev/tty"} /'"$input"'/ {print}' <abc.txt
Quello che ottengo come output è l'intero file. Qualcuno può aiutarmi a scoprire dove sto sbagliando?

Risposte:


1

Quello che fai è: leggi il pattern da tty, lo metti in una variabile di awk (non della shell) chiamata input, quindi abbini la linea del contenuto di una variabile shell chiamata input. (Basta guardare le virgolette e provare a interpretare il codice da soli.) Quella variabile è vuota, quindi awk corrisponde alla riga contro //, una regexp vuota che corrisponde sempre.

Tutto quello che devi fare è

$0 ~ input { print }

o

match( $0, input) { print }

In realtà "{print}" può essere omesso perché l'azione predefinita per qualsiasi argomento corrispondente è la stampa del record.


Grazie @ Sándor per aver risolto l'errore. Mi stavo strappando i capelli per questo. :)
studente

Piu che benvenuto. Posso immaginare. A volte la citazione rende anche i casi più semplici più difficili, altre volte li rende davvero più difficili.
Gombai Sándor,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.