使用awk提取包含特定单词的行记录

时间:2012-06-19 17:56:39

标签: shell awk

假设我的输入文件是制表符分隔的,我如何识别$ 0是否包含单词“hello”并且它需要不区分大小写?

here is a hello       whateverColumn2
nonono nonono         whateverItIs
here HeLLo again      mockColumn2

非常感谢!

1 个答案:

答案 0 :(得分:3)

根据文件data.txt中的行:

awk -F"\t" '/hello/ {print $0}' data.txt

将打印

here is a hello       whateverColumn2
here hello again      mockColumn2

-F"\t"将标签设置为输入行的字段分隔符。

更新(根据OP以下评论中的请求):

要使case-insensitive使用IGNORECASE标志:

awk -F"\t" 'BEGIN{IGNORECASE=1} /hello/ {print $0}' data.txt

请注意,IGNORECASE variable是GNU扩展,可能在其他版本的AWK中不可用。

或者,使用match的示例。为了使这种不区分大小写,输入转换为小写:

awk -F"\t" '{if (match(tolower($0), "hello")) print $0}' data.txt

由于匹配可以采用regular expressions,因此使用正确的正则表达式可能无需转换为小写。

在Linux下使用GNU Awk 3.1.6进行测试