awk 子串单个字符

AWE*_*AWE 2 linux bash awk substring gawk

这是columns.txt

aaa bbb 3
ccc ddd 2
eee fff 1
3   3   g
3   hhh i
jjj 3   kkk
ll  3   mm
nn  oo  3
Run Code Online (Sandbox Code Playgroud)

我可以找到第二列以“b”开头的行:

awk '{if(substr($2,1,1)=="b") {print $0}}' columns.txt
Run Code Online (Sandbox Code Playgroud)

我可以找到第二列以“bb”开头的行:

awk '{if(substr($2,1,2)=="bb") {print $0}}' columns.txt
Run Code Online (Sandbox Code Playgroud)

为什么哦为什么我找不到第二列中第二个字符是“b”的行?:

awk '{if(substr($2,2,2)=="b") {print $0}}' columns.txt 
Run Code Online (Sandbox Code Playgroud)

awk -W version== GNU Awk 3.1.8

anu*_*ava 5

您可以使用:

awk 'substr($2,2,1) == "b"' columns.txt
aaa bbb 3
Run Code Online (Sandbox Code Playgroud)
  1. substr函数的第三个参数是字符串的长度。
  2. print是 awk 中的默认操作。