我打算将一些字符集匹配到一个单词的中间,在那里我检查单词的开头和结尾(它不能匹配第一个或最后一个字符,否则我的目标是无效的)。 然后我检查它是否存在于单词中

$1~/xampl/

我想出的代码行工作得很好,除非使用

awk -f awkfile inputfile > outputfile

我希望它增加存在而不是打印,但它每次匹配时都会打印......我错过了什么吗?

#1楼 票数:1 已采纳

awk程序遵循以下结构:

CONDITION { ACTIONS } [ CONDITION { ACTIIONS } ... ]

其中 CONDITION 或 ACTIONS 是可选的。 如果缺少 CONDITION,如下所示:

awk '{ print }'

awk 将假设 CONDITION 为true并在输入的每一行上执行{ print }

如果缺少 ACTIONS,如下所示(类似于您的情况):

awk '$1~/xampl/'

awk 将运行默认操作,即{print} 如果您不想打印而只是递增,则需要添加一个操作,如下所示:

awk '$1~/xampl/ { c++ }'

#2楼 票数:0

如果我正确理解了您的问题,那么您仅在出现在第一个字段中间时才匹配该单词的表达是错误的。 您的后缀索引减少了 2; 应该是:

#!/usr/bin/awk -f
"xampl"!=substr($1, 1, length("xampl")) && "xampl"!=substr($1, length($1)-length("xampl")+1, length("xampl")) && $1~/xampl/ {exists+=1}

可以缩短为:

#!/usr/bin/awk -f
$1~/.+xampl.+/ {exists++}

然而,这些脚本没有副作用,即你所做的只是增加一个变量,但你永远不会打印它。 这让我相信您的错误实际上是在您没有向我们展示的脚本的其他部分。 无论如何,当从文件中调用时,您的awk程序的行为不应有所不同。

  ask by ChewySalmon translate from so

未解决问题?本站智能推荐:

3回复

使用awk从具有空格的文本字符串的文件中打印打印

这可能很简单,但是会出错。 我有一个格式如下的文件: 这是三列。 最后一个可以是任何长度的任何文本(它是该项目的注释)。 我有类似下面的东西,但它只抓住了最后一个问候。 我如何抓住所有文本'你好'并将其保存到var $ 3: 谢谢。
2回复

AWK-搜索模式-将其添加为变量-搜索不是变量的下一行并打印它+变量

我有一个给定的文件: 我希望能够读取此文件并搜索字符串 找到该字符串后,它将该行添加到变量中并存储它。 然后它读取文件的下一行。 如果它遇到以# 开头的行,它会忽略它并移动到下一行。 如果遇到不包含“.pp”且不以 # 开头的行,则应在新文件中最后存储的变量旁边打印该行。 输出将如下所示: 我想用
4回复

在awk中的“<”和“>”之间打印文本

我有以下形式的一些示例数据,需要从中提取电子邮件地址: 目前,我正在使用此: 但是,这只是找到与正则表达式匹配的字符串。 当要打印出来时,它仍然会打印出整个内容(就像在第一个文本框中一样)。
2回复

Ubuntu,Bash,awk,正则表达式->在文本文件中找到所有[数字]并打印

我想在“ []”括号中找到每个数字,并在文本文件中打印其所有外观(行号)。 例如,我得到了这样的文本文件: 输出应该是这样的: 到目前为止,这是我所做的: 该脚本找到了所需的数字,但是现在我想以某种简单的方式保存它及其行号(NR变量)。 我应该尝试使用数组吗? 我至少需要二维
1回复

awk如何打印它映射的正则表达式?

这是文件内容: 当我用awk做正则表达式映射时: 我的问题是:为什么{if($0~/[0-9]{2}:[0-9]{2}:[0-9]{2}.*/) print $0} , /[0-9]{2}:[0-9]{2}:[0-9]{2}.*/ {print $0}什么都不打印,但是/[0-9]{2}:[0-9]
1回复

awk,只打印与正则表达式匹配的模式

例如我有这个字符串: 10.1.2.194 (197.84.211.148) - - [08/Oct/2015:09:01:44 +0000] "GET /merlin-web-za/web/images/refinements/loader.gif HTTP/1.1" 200 4178 0 18
5回复

使用sed和awk编辑文件中的行

我有一些主机名的文件,这些主机名由空格和一个位置分隔。 我必须编辑主机文件。 我已经写了sed / awk行以删除字符,但是我的sed行仅返回整行。 我需要删除该行的Cxx部分。 输出应该看起来像
1回复

匹配时awk连接下一行

我正在使用awk分析文本文件,并将与正则表达式匹配的行与下一行连接起来。 我正在使用以下命令: 当我从提示符下测试它时,它可以按预期工作,但是当我在bash脚本中输入相同的命令时,输出与输入文件相同。 为什么不应该在bash脚本中起作用? UPDATE 这是完整的脚本: 我