簡體   English   中英

AWK:檢查值是否存在於 bash 數組中

[英]AWK: check value if exists in bash array

awk我有一個文件,其中每一行都包含字段$5 1..16范圍內的數字。 例如:

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

我想檢查字段$5的數字並打印與該值相關的消息。 例如:

1;in range
8;in range
25;not in range 
5;in range

我在下面有這個代碼,但它有點不方便;

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"}'

因為我創建了一個數組;

arr=(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)

我試圖實現這里顯示的方法https://stackoverflow.com/a/15394738/14320738像這樣但沒有成功:

awk -F";" 'OFS";" {if ($5=="${arr[*]}" && $5!="") print $5 OFS "in range"}
    {if (($5!="${arr[*]}" && $5!="") print $5 OFS "not in range"}'

array 和 awk 命令都在同一個腳本下。 我不知道如何用awk做到這一點。 新手來了,

謝謝你。

編輯:如果有辦法在 awk 中處理數組方法,我將不勝感激。

編輯 2:經過有用的評論后,我得出結論bash array 不能傳遞到 awk array

恕我直言,您不需要在此處創建數組,您可以簡單地在awk運行一個條件並相應地打印語句。

awk -F';' '{if($5>=1 && $5<=16){print $5"; in range"} else{print $5";not in range"}}' Input_file

使用大於和小於...

awk -F";" '{ if ($5 >= 1 && $5 <= 10) print $5, "In range"; else print $5, "Not in range" }' <file>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM