
Ich versuche, ein Awk-Skript zu schreiben, um in einer Datei nach einem Muster zu suchen, das vom Benutzer eingegeben wurde.
Mein Code sieht folgendermaßen aus:
awk 'BEGIN{printf "Enter : ";getline input<"/dev/tty"} /'"$input"'/ {print}' <abc.txt
Als Ausgabe erhalte ich die gesamte Datei. Kann mir jemand helfen, herauszufinden, wo ich falsch liege?
Antwort1
Was Sie tun, ist: Sie lesen das Muster von tty, Sie platzieren es in einer Variable von awk (nicht der Shell) namens input, dann vergleichen Sie die Zeile des Inhalts einesHülseVariable namens „Input“. (Sehen Sie sich einfach die Anführungszeichen an und versuchen Sie, den Code selbst zu interpretieren.) Diese Variable ist leer, also gleicht awk die Zeile mit // ab, einem leeren regulären Ausdruck, der immer übereinstimmt.
Alles was Sie tun müssen ist
$0 ~ input { print }
oder
match( $0, input) { print }
Eigentlich kann "{ print }" weggelassen werden, weil die Standardaktion bei jedem übereinstimmenden Sachverhalt das Drucken des Datensatzes ist.