Bash 作为grep搜索模式的awk结果

Bash 作为grep搜索模式的awk结果,bash,awk,grep,Bash,Awk,Grep,这是一块圆木 21:36 b05808aa-c6ad-4d30-a334-198ff5726f7c new 22:21 59996d37-9008-4b3b-ab22-340955cb6019 new 21:12 2b41f358-ff6d-418c-a0d3-ac7151c03b78 new 12:36 7ac4995c-ff2c-4717-a2ac-e6870a5670f0 new 我通过awk'{print$2}'st.log打印它 所以我得到了 b05808aa-c6ad-4d30-a

这是一块圆木

21:36 b05808aa-c6ad-4d30-a334-198ff5726f7c new
22:21 59996d37-9008-4b3b-ab22-340955cb6019 new
21:12 2b41f358-ff6d-418c-a0d3-ac7151c03b78 new
12:36 7ac4995c-ff2c-4717-a2ac-e6870a5670f0 new
我通过awk'{print$2}'st.log打印它 所以我得到了

b05808aa-c6ad-4d30-a334-198ff5726f7c
59996d37-9008-4b3b-ab22-340955cb6019
2b41f358-ff6d-418c-a0d3-ac7151c03b78
7ac4995c-ff2c-4717-a2ac-e6870a5670f0
现在我需要以这种方式将它传递给grep

awk '{print $2}' |xargs -i grep -w "pattern from awk" st.log
我需要确切地知道如何将每个创建的记录从awk传递到grep。我不需要其他解决方案,因为我的任务比这件更复杂。谢谢。

用bash和grep:

grep -f <(awk '{print $2}' piece_of_log) st.log

grep-f您似乎正在寻找替换字符串选项:

   -I replace-str
          Replace occurrences of replace-str in the initial-arguments with
          names read from standard input.  Also, unquoted  blanks  do  not
          terminate  input  items;  instead  the  separator is the newline
          character.  Implies -x and -L 1.
像这样:

awk '{print $2}' | xargs -I{} grep -w {} st.log
无需awk:

grep -Ff <(cut -d' ' -f2 log)

grep-Ff你到底想在这里做什么?你要从文件中取出一列,然后在文件中再次对该行进行灰显?这样做的最终目的是什么?@EricRenouf,因为有几个分步操作是相互关联的。所以我需要的正是我所要求的。我需要从列表grep文件中查找关键字列表,然后再从列表grep文件中查找每个关键字的记录。但是,如果您从每一行中获得
$2
,然后从同一文件中查找至少包含一个
$2
的行,它总是会重复出现在同一个文件中,对吗?除非
awk
grep
实际上正在处理不同的文件,而不是像您在question@EricRenouf你是对的,我想在同一个文件上做。我无法通过一次搜索来搜索所有内容,因为行是相互关联的。例如:我需要过滤掉字段#5,从这个输出中,我必须获取另一个字段#2,然后我必须再次遍历输入文件来搜索与#2相关的所有记录,并检查该字段#3,如果检查良好,我将使用此字段打印所有记录。然后我怀疑到相同输出的较短路径将是
cat st.log
,但如果必须使用
awk
grep
这两种方法,我会选择@cyrus answer