AWK: Überprüfen Sie den Wert, falls er im Bash-Array vorhanden ist
In awkmir eine Datei hat , dass jede Zeile eine Zahl im Bereich zwischen enthält 1..16im Feld $5. Zum Beispiel:
X;X;X;X;1;X;X
X;X;X;X;8;X;X
X;X;X;X;25;X;X
X;X;X;X;5;X;X
Ich möchte die Nummer im Feld überprüfen $5und eine Nachricht zum Wert drucken. Zum Beispiel:
1;in range
8;in range
25;not in range
5;in range
Ich habe diesen Code unten, aber es ist irgendwie unhandlich;
awk -F";" 'OFS";" {if (($5=="1" || $5=="2" || $5=="3" || $5=="4" || $5=="5" || $5=="6" || $5=="7" || $5=="8" || $5=="9" || $5=="10" || $5=="11" || $5=="12" || $5=="13" || $5=="14" || $5=="15" || $5=="16") && $5!="") print $5 OFS "in range"}
{if (!($5=="1" || $5=="2" || $5=="3" || $5=="4" || $5=="5" || $5=="6" || $5=="7" || $5=="8" || $5=="9" || $5=="10" || $5=="11" || $5=="12" || $5=="13" || $5=="14" || $5=="15" || $5=="16") && $5!="") print $5 OFS "not in range"}'
seit ich ein Array erstellt habe;
arr=(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)
Ich habe versucht, die hier gezeigten Methoden zu implementieren https://stackoverflow.com/a/15394738/14320738 so aber nicht gelungen:
awk -F";" 'OFS";" {if ($5=="${arr[*]}" && $5!="") print $5 OFS "in range"}
{if (($5!="${arr[*]}" && $5!="") print $5 OFS "not in range"}'
Sowohl das Array als auch der Befehl awk befinden sich unter demselben Skript. Ich weiß nicht, wie ich es machen soll awk. Neuling hier,
Vielen Dank.
Bearbeiten: Wenn es eine Möglichkeit gibt, mit der Array-Methode in awk zu tun, würde ich das begrüßen.
Edit 2: Nach hilfreichen Kommentaren komme ich zu dem Schluss, dass das Bash-Array nicht an das awk-Array übergeben werden kann .
Antworten
IMHO müssen Sie hier kein Array erstellen, Sie können einfach eine Bedingung in ausführen awkund Anweisungen entsprechend drucken.
awk -F';' '{if($5>=1 && $5<=16){print $5"; in range"} else{print $5";not in range"}}' Input_file
Verwenden Sie mehr als und weniger als ...
awk -F";" '{ if ($5 >= 1 && $5 <= 10) print $5, "In range"; else print $5, "Not in range" }' <file>