GREP by result of awk

有些话、适合烂在心里 提交于 2021-02-19 06:22:44

问题


Output of awk '{print $4}' is

b05808aa-c6ad-4d30-a334-198ff5726f7c
59996d37-9008-4b3b-ab22-340955cb6019
2b41f358-ff6d-418c-a0d3-ac7151c03b78
7ac4995c-ff2c-4717-a2ac-e6870a5670f0

I need to grep file st.log by these records. Something like awk '{print $4}' |xargs -i grep -w "pattern from awk" st.log I dont know how to pass pattern correctly?


回答1:


What about

awk '{print $4}' | grep -F -f - st.log

Credits to Eric Renouf, who noticed that -f - can be used for standard input instead -f <(cat), Note: -f /dev/stdin also works and avoids launching a new process.

or closer to the question to have the output ordered

awk '{print $4}' | xargs -i grep -F {} st.log 

maybe -w was not the option OP needed but -F

grep --help
-F, --fixed-strings       PATTERN is a set of newline-separated strings
-w, --word-regexp         force PATTERN to match only whole words

-w will match only line that contain exactly pattern

examples

grep -w . <<<a       # matches
grep -w . <<<ab      # doesn't match
grep -F . <<<a       # doesn't match
grep -F . <<<a.b     # matches



回答2:


May be something along these lines be helpful

How to process each line received as a result of grep command

awk '{print $4} | while read -r line; do 
    grep $line st.log
done


来源:https://stackoverflow.com/questions/44521290/grep-by-result-of-awk

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!