awk 返回带有子字符串的行

Posted

技术标签:

【中文标题】awk 返回带有子字符串的行【英文标题】:awk returns lines with substring 【发布时间】:2014-05-05 10:57:31 【问题描述】:

我有一个文本文件:

string 323
blah 23
string_substring 33

当我的 bash 变量 $f = 'string' 时,我想使用 awk 仅返回第一行中的数字

awk -F" " -v x=$f '$1 ~ x print $2' file.txt

即使我使用 " " 的字段分隔符,它也会返回第一行和第三行......我怎样才能让它只匹配第一行?有没有办法说 $1 = x,即第一个参数正好是 x,仅此而已?

【问题讨论】:

【参考方案1】:

如果字符串是第一列,则使用它作为条件:

awk '$1=="string" print $2' file

或者从一个shell变量,

var="string"
awk -v f=$var '$1==f print $2' file

【讨论】:

【参考方案2】:

当你说:

$1 ~ x

您指定第一个字段匹配 x。如果您希望它是平等的,请这样说:

$1 == x

这样说:

awk -F" " -v x=$f '$1 == x print $2' file.txt

【讨论】:

以上是关于awk 返回带有子字符串的行的主要内容,如果未能解决你的问题,请参考以下文章

删除带有特定字符数的行

我应该使用 cut 还是 awk 来提取字段和字段子字符串?

如何使用带有行子级的 jQuery 数据表构建表

awk 处理字符

Linux提取不匹配字符串的行和列(awk函数)

awk从入土到入门(10)awk内置函数