使用 Grep 查找同一行上的两个单词

使用 Grep 查找同一行上的两个单词

我希望使用 grep(或egrep)来查找同一行上的两个单词。安省和周一

Flight#   Airline  Depart  Arrive  Day
------------------------------------------
93104      TEAM     ONT     LAX   MONDAY
62876       GE      NYC     ONT  THURSDAY
30118      LOGI     ONT     PHX   FRIDAY
12033       F       LAX     PHX   MONDAY
40990      ACTI     PHX     ONT   MONDAY
92377       EA      ONT     PHX   SUNDAY

我尝试了各种命令,但返回的是包含 MONDAY 或 ONT 的每一行,而不是包含航班 #93104 的行

答案1

可能:

grep "ONT.*MONDAY" file

答案2

如果您知道该ONT单词可以在第三列中找到,并且该MONDAY单词可以在第五列中找到:

$ awk '$3 == "ONT" && $5 == "MONDAY"' file
93104      TEAM     ONT     LAX   MONDAY

这依赖于列中的值没有嵌入空格。上面的命令awk根据所需的单词作为字符串测试第 3 列和第 5 列的值,并将输出通过测试的任何行。

要匹配ONT第三列或第四列以及MONDAY第五列:

$ awk '($3 == "ONT" || $4 == "ONT") && $5 == "MONDAY"' file
93104      TEAM     ONT     LAX   MONDAY
40990      ACTI     PHX     ONT   MONDAY

如果你用过grep,您将无法确定这两个词是否匹配完整的单词或在正确的列(除非您使正则表达式过于复杂)。

相关内容