簡體   English   中英

awk 程序檢查每行是否有“0”

[英]awk program check if there is '0' in each line

樣本輸入:

a 54 65 43
b 45 12 98
c 99 0 12
d 3 23 0

樣本輸出: c,d

基本上我想檢查每行中是否有零值,如果是,則打印索引(a,b,c,d)。

我的代碼:

for(i=1;i<=NF;i++)if(i==0){print$1}我有一個語法錯誤

謝謝。

另一種方法

$ awk '/\y0\y/{print $1}' file
c
d

\\y是詞邊界運算符。 可能只在gawk

代碼需要一組大括號。

awk '{ for(i=1;i<=NF;i++)if($i==0) print $1}' filename

(該print所以我把那些出不需要括號。)

如果第一個字段不包含數字,則可能從 2 開始循環。

Awk 腳本的一般形式是一個序列

condition { action }

對,后者需要大括號圍繞它。 在沒有條件的情況下,無條件地在每一行上執行一個操作。

為了使您的代碼工作,您需要將其更改為:

$ awk '{for(i=1;i<=NF;i++)if($i==0) print $1}' file
c                                                      
d        
  • 您需要將代碼放在一個塊中( {}對)。
  • 您必須在 if 條件中使用$i而不是i$i表示第i列。
  • 雖然這里不需要,但最好在 command 和 paramter 之間添加一個空格。 print $1

最好稍微改進一下:

awk '{for(i=1;i<=NF;i++)if($i==0) {print $1;next}}' file

添加next以避免在行中有多個0時多次print $1

鑒於列是空格分隔的,您也可以這樣做:

awk '/( |^)0( |$)/{print $1}' file

這個不需要 GNU awk。
/( |^)0( |$)/是一個RegEx ,在命令中它是$0 ~ /( |^)0( |$)/的縮寫。
^表示行開始, $行結束。

暫無
暫無

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

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