如何使用 awk 打印字段与特定字符串匹配的行?

发布于 2024-09-03 11:56:34 字数 191 浏览 4 评论 0原文

我有:

1 LINUX param1 value1 
2 LINUXparam2 value2
3 SOLARIS param3 value3
4 SOLARIS param4 value4

我需要 awk 来打印 $2LINUX 的所有行。

I have:

1 LINUX param1 value1 
2 LINUXparam2 value2
3 SOLARIS param3 value3
4 SOLARIS param4 value4

I need awk to print all lines in which $2 is LINUX.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

揽月 2024-09-10 11:56:34

awk 中:

awk '$2 == "LINUX" { print $0 }' test.txt

请参阅awk 示例< /a> 很好地介绍了 awk

在 sed 中:

sed -n -e '/^[0-9][0-9]* LINUX/p' test.txt

请参阅 sed 通过示例 很好地介绍了 sed

In awk:

awk '$2 == "LINUX" { print $0 }' test.txt

See awk by Example for a good intro to awk.

In sed:

sed -n -e '/^[0-9][0-9]* LINUX/p' test.txt

See sed by Example for a good intro to sed.

攀登最高峰 2024-09-10 11:56:34

在这种情况下,您可以使用漂亮的惯用 awk

awk '$2=="LINUX"' file

即:

  • 在 True 条件下 awk 的默认操作是打印当前行。
  • 由于只要第二个字段是 LINUX,$2 == "LINUX" 就为 true,因此这将打印发生这种情况的那些行。

如果您想打印所有与 LINUX 匹配的行,无论它是大写还是小写,请使用 toupper() 将它们全部大写:

awk 'toupper($2)=="LINUX"' file

或者使用以下语法之一的 IGNORECASE

awk 'BEGIN {IGNORECASE=1} $2=="LINUX"' file
awk -v IGNORECASE=1 '$2=="LINUX"' file

This is a case in which you can use the beautiful idiomatic awk:

awk '$2=="LINUX"' file

That is:

  • The default action of awk when in a True condition is to print the current line.
  • Since $2 == "LINUX" is true whenever the 2nd field is LINUX, this will print those lines in which this happens.

In case you want to print all those lines matching LINUX no matter if it is upper or lowercase, use toupper() to capitalize them all:

awk 'toupper($2)=="LINUX"' file

Or IGNORECASE with either of these syntaxs:

awk 'BEGIN {IGNORECASE=1} $2=="LINUX"' file
awk -v IGNORECASE=1 '$2=="LINUX"' file
盗梦空间 2024-09-10 11:56:34

我的回答很晚了,但没有人提到:

awk '$2~/LINUX/' file

My answer is very late, but no one has mentioned:

awk '$2~/LINUX/' file
坐在坟头思考人生 2024-09-10 11:56:34

试试这些:

egrep -i '^\w+ LINUX ' myfile

awk '{IGNORECASE=1}{if ($2 == "LINUX") print}' myfile

sed -ne '/^[0-9]* [Ll][Ii][Nn][Uu][Xx] /p' myfile

编辑:修改为不区分大小写

Try these out:

egrep -i '^\w+ LINUX ' myfile

awk '{IGNORECASE=1}{if ($2 == "LINUX") print}' myfile

sed -ne '/^[0-9]* [Ll][Ii][Nn][Uu][Xx] /p' myfile

edit: modified for case insensitivity

奶茶白久 2024-09-10 11:56:34

我认为使用 awk 包含“精确”和“部分匹配”情况可能是个好主意))

因此,对于精确匹配

OTHER_SHELL_COMMAND | awk '$2 == "LINUX" { print $0 }'

对于部分匹配

OTHER_SHELL_COMMAND | awk '$2 ~ /LINUX/ { print $0 }'

I think it might be a good idea to include "exact" and "partial matching" cases using awk ))

So, for exact matching:

OTHER_SHELL_COMMAND | awk '$2 == "LINUX" { print $0 }'

And for partial matching:

OTHER_SHELL_COMMAND | awk '$2 ~ /LINUX/ { print $0 }'
臻嫒无言 2024-09-10 11:56:34

在 GNU sed 中,可以使用 I 修饰符进行不区分大小写的匹配:

sed -n '/^[^[:space:]][[:space:]]\+linux[[:space:]]\+/Ip'

将稳健地匹配“linux”、“Linux”、“LINUX”、“LiNuX”等第二个字段(在第一个字段之后,可能是任何非空白字符)并被任意数量(至少一个)的任何空白(主要是空格和制表符,尽管您可以使用 [:blank:] 将其严格限制为那些)。

In GNU sed case-insensitive matches can be made using the I modifier:

sed -n '/^[^[:space:]][[:space:]]\+linux[[:space:]]\+/Ip'

Will robustly match "linux", "Linux", "LINUX", "LiNuX" and others as the second field (after the first field which may be any non-whitespace character) and surrounded by any amount (at least one) of any whitespace (primarily space and tab, although you can use [:blank:] to limit it to strictly those).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文