linux中grep默认过滤文件所有内容,如果我只想过滤指定第3列有没有指定关键字,并显示指定行的所有内容,则比较麻烦。这时候可以使用awk命令实现。
如果你想要在过滤指定第3列中包含某个关键字的行时,输出整行内容,可以直接使用 awk
来完成这个需求。以下是一个示例命令:
假设你的文件是 data.txt
,并且你想要查找第3列中包含 keyword2
的整行内容,可以使用以下命令:
awk '$3 == "keyword2"' data.txt
或者,如果你想要查找包含 keyword2
的任意行(而不仅仅是精确匹配),可以使用:
awk '$3 ~ /keyword2/' data.txt
这样,awk
会检查每一行的第3列,如果该列中包含 keyword2
(或完全等于 keyword2
),就会输出整行内容。
例子
假设 data.txt
文件内容如下:
123 abc keyword1
456 def keyword2
789 ghi keyword3
执行上述的 awk '$3 ~ /keyword2/' data.txt
命令,输出将是:
456 def keyword2
这样你就能获得包含指定关键字的整行内容。
过滤指定变量值
要在 awk
中使用 shell 变量(例如 $HOSTNAME
),你可以使用 -v
选项将该变量传递给 awk。以下是如何将 keyword2
替换为 shell 变量 $HOSTNAME
的示例:
awk -v hostname="$HOSTNAME" '$3 == hostname' data.txt
在这个命令中:
-v hostname="$HOSTNAME"
将 shell 变量$HOSTNAME
传递给 awk,并将其赋值给 awk 中的变量hostname
。- 然后你可以在 awk 的条件中使用
hostname
来进行比较。
这样就可以在 awk 中使用 shell 变量了。