【发布时间】:2014-11-10 04:53:26
【问题描述】:
这里是 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
我可以找到第二列以“b”开头的行:
awk '{if(substr($2,1,1)=="b") {print $0}}' columns.txt
我可以找到第二列以“bb”开头的行:
awk '{if(substr($2,1,2)=="bb") {print $0}}' columns.txt
为什么我找不到第二列中第二个字符为“b”的行?:
awk '{if(substr($2,2,2)=="b") {print $0}}' columns.txt
awk -W version == GNU awk 3.1.8
【问题讨论】:
-
因为您告诉
substr()返回 2 个字符(最后一个 arg),然后将生成的 2 字符字符串(例如bb)与 1 字符字符串b进行比较看看它们是否相同,当然它们永远不可能相同。 -
我一直将此函数用作 substr(field,start,end) ,其中 end 是字符串的第 N 个字符。到目前为止它一直有效,因为我总是从第一个字符开始搜索。
标签: linux bash awk substring gawk