【问题标题】:Awk - Grep - Match the exact string in a fileawk - Grep - 匹配文件中的确切字符串
【发布时间】:2020-07-23 19:07:47
【问题描述】:

我有一个看起来像这样的文件

ON,111111,TEN000812,Super,7483747483,767,Free
ON,262762,BOB747474,SuperMan,4347374,676,Free
ON,454644,FRED84848,Super Man,65757,555,Free

我需要完全匹配第四列中的值,因为它们是写的。因此,如果我正在搜索“Super”,我需要它只返回带有“Super”的行。

ON,111111,TEN000812,Super,7483747483,767,Free

同样,如果我正在寻找“超人”,我需要返回确切的行。

ON,454644,FRED84848,Super Man,65757,555,Free

我尝试过使用 grep,但 grep 会匹配所有包含 Super 的实例。所以如果我这样做:

grep -i "Super" file.txt

它返回所有行,因为它们都包含“超级”

ON,111111,TEN000812,Super,7483747483,767,Free
ON,262762,BOB747474,SuperMan,4347374,676,Free
ON,454644,FRED84848,Super Man,65757,555,Free

我也厌倦了 awk,我相信我已经接近了,但是当我这样做时:

awk '$4==Super' file.txt

我仍然得到这样的输出:

ON,111111,TEN000812,Super,7483747483,767,Free
ON,262762,BOB747474,SuperMan,4347374,676,Free

我已经在这里工作了好几个小时,如果在这一点上提供任何帮助,我们将不胜感激。

【问题讨论】:

    标签: awk grep


    【解决方案1】:

    您已经接近了,或者我应该说非常接近,只需将字段分隔符作为逗号放在您的解决方案中即可。

    awk 'BEGIN{FS=","} $4=="Super"' Input_file
    

    在与第 4 个字段与字符串值进行比较时,OP 的尝试中还有一件事,字符串应包含在 "

    或者,如果您想将值作为awk 变量进行比较,请尝试关注。

    awk -v value="Super" 'BEGIN{FS=","} $4==value' Input_file
    

    【讨论】:

      【解决方案2】:

      其实你已经很接近了,你可以试试:

      awk -F, '$4=="Super" {print}' file.txt

      我发现这种形式更容易掌握。虽然比@RavinderSingh13 略长

      -F 是字段分隔符,在本例中为逗号
      接下来,您有一个条件,然后是操作
      条件是检查第四个字段是否有字符串 Super
      如果找到字符串,打印它

      【讨论】:

      • awk -F, '$4=="Super"' file.txt 会更短