if statement - awk: printing FILENAME once when criteria are met several times in a file -
i have series of files , know ones meet criteria (egs. $1 == "ice" && $2 == "cream"). criterion met several times in same file. awk print filename once when criterion met.
i hope made myself clear.
try (nextfile gnu extension):
awk '$1=="ice" && $2=="cream"{print filename;nextfile}' file1 file2 file3 or if don't have gnu:
awk 'fnr==1{p=0} $1=="ice" && $2=="cream" && !p {print filename;p=1}' file1 file2 file3 the fnr==1 resets p flag @ start of each file, , when criteria met, p flag gets set 1 filename comes out once.
by way, may prefer simplicity of this:
grep -l "^ice.*cream" file* it not identical, pretty similar.
edited after acceptance
this possibility may more elegant. saves names of matching files in array names[] , prints keys of array names[] @ end.
awk '$1=="ice" && $2=="cream" {names[filename]++} end{for(i in names)print i}'
Comments
Post a Comment