如果行包含字符串,则grep模式输出子字符串

Mat*_*ins 1 regex awk grep sed

如果word3是'nn1',我希望Grep(或awk或sed)在新行上输出word2.我的制表符分隔的源文本文件中的每一行都是

<number> <word1> <word2> <word3> <lots of junk>
Run Code Online (Sandbox Code Playgroud)

或者我需要在两个通道中执行此操作 - 一个用于隔离线路,一个用于拉出word2?

任何帮助感激不尽!

anu*_*ava 5

你可以使用awk:

awk '$4 == "nn1"{print $3}' file
Run Code Online (Sandbox Code Playgroud)

注意:对于制表符分隔文件以及上面的awk命令将起作用,因为空格或制表符是默认分隔符.

但是,如果您希望仅在选项卡上而不是在空格上拆分字段,请使用:

awk -F'\t' '$4 == "nn1"{print $3}' file
Run Code Online (Sandbox Code Playgroud)

  • 可能有用的说`-F"\ t"`因为它显然是一个制表符分隔的文件 (2认同)

Tom*_*ech 5

Awk是这项工作的工具:

awk '$4 == "nn1" { print $3 }' file
Run Code Online (Sandbox Code Playgroud)

如果是第四列nn1,则打印第三列.

默认情况下,awk会在任意数量的空白字符(制表符或空格)上拆分该行.正如你所说的"word1","word2"等我想每个字段中没有空格,所以默认行为应该没问题.但是,如果要显式,可以自己指定字段分隔符:

awk -F'\t' '$4 == "nn1" { print $3 }' file
Run Code Online (Sandbox Code Playgroud)

  • 可能有用的说`-F"\ t"`因为它显然是一个制表符分隔的文件 (2认同)