在 awk 命令中使用变量

尼基尔

我试图

for ds in $(cat Nikhil/strings.txt )
do
awk -v k="$ds" '{if (substr($0,2,5) == k )print $0}' criteria5.txt
done

但是当我执行此操作时,它将 k 的值作为 k 而不是变量。Shell 检查 .net 无法正常工作,因此必须在此处发布

+ for ds in '$(cat Nikhil/strings.txt )'

+ awk -v k=CDA01 '{if (substr($0,2,5) == k )print $0}' criteria5.txt

这是我尝试使用 sh -x 调试时的输出方式。任何建议请

αғsнιη

我无法重现您的代码中发生的事情,但我认为一切在语法上都很好并且可以正常工作;但这就是您似乎正在尝试使用外壳循环做的事情,您最好喜欢它下面我awk单独使用命令。

gawk 'ARGIND==2{ strings[$0]; next; };
     (substr($0, 2, 5) in strings);
' RS='[[:space:]]+' strings.txt RS='\n' criteria.txt

在这里,我们阅读空格或所有字符串(分裂\newline[[:space:]]“strings.txt”文件到一个awk关联数组(我们将其命名为strings)。

ATGIND==2控制输入,并运行该代码的第一个块只为“strings.txt”文件和AWK将跳过运行下一个输入的(多个)块。在这里看到为什么我们更喜欢这个而不是更常见的NR==FNR.

打开下一个文件“criteria.txt”进行处理时,我们将 Record Separator 设置为默认的\newline in RS='\n'并且(substr($0, 2, 5) in strings)我们正在检查我们的数组中是否存在从位置2开始且字符长度为5的预期substring,如果存在,则该行将转到 output 。

输入数据:strings.txt

CDA01 CDA02
   CDA03
CDA03    CDA05 CDA06

criteria.txt

xCDA01 something
xxCDA02 someotherthing
CDA01
vcCDA03 oCDA03
vCDA05 end

输出:

xCDA01 something
vCDA05 end

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在awk命令中使用变量

来自分类Dev

在脚本的Awk命令中使用变量

来自分类Dev

如何在bash中的awk命令中使用bash变量

来自分类Dev

在awk中使用shell变量

来自分类Dev

在Linux的awk命令中使用tr命令

来自分类Dev

如何在 awk 变量中使用 awk 变量?

来自分类Dev

如何将AWK的输出存储为变量,以在BASH脚本的SED命令中使用?

来自分类Dev

不能在awk命令中使用“(”

来自分类Dev

如何在awk中使用stat命令

来自分类Dev

Shell脚本:在awk中使用命令

来自分类Dev

Shell脚本:在awk中使用命令

来自分类Dev

如何在awk中使用cut命令?

来自分类Dev

在perl中使用awk和sed命令

来自分类Dev

在使用awk的bash脚本中使用变量

来自分类Dev

无法在awk中使用系统导出变量

来自分类Dev

在awk中使用变量进行除法

来自分类Dev

在awk中使用变量和数组

来自分类Dev

在AWK中使用和操作日期变量

来自分类Dev

在awk中使用变量和数组

来自分类Dev

如何在awk substr中使用变量

来自分类Dev

在awk脚本中使用if和shell变量

来自分类Dev

在awk语句中使用变量

来自分类Dev

如何在awk中使用变量

来自分类Dev

在AWK中使用和操作日期变量

来自分类Dev

在awk中使用bash的扩展变量

来自分类Dev

如何在awk中使用变量的值

来自分类Dev

在awk程序中使用awk

来自分类Dev

如何在awk命令中使用命令的输出?

来自分类Dev

如果使用AWK命令