[英]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
{}
對)。$i
而不是i
, $i
表示第i
列。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.