我试图
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 调试时的输出方式。任何建议请
我无法重现您的代码中发生的事情,但我认为一切在语法上都很好并且可以正常工作;但这就是您似乎正在尝试使用外壳循环做的事情,您最好喜欢它。下面我awk
单独使用命令。
gawk 'ARGIND==2{ strings[$0]; next; };
(substr($0, 2, 5) in strings);
' RS='[[:space:]]+' strings.txt RS='\n' criteria.txt
在这里,我们阅读空格或所有字符串(分裂\n
ewline[[:space:]]
在“strings.txt”文件到一个awk
关联数组(我们将其命名为strings
)。
的ATGIND==2
控制输入,并运行该代码的第一个块只为“strings.txt”文件和AWK将跳过运行下一个输入的(多个)块。在这里看到为什么我们更喜欢这个而不是更常见的NR==FNR
.
当打开下一个文件“criteria.txt”进行处理时,我们将 Record Separator 设置为默认的\n
ewline in RS='\n'
;并且(substr($0, 2, 5) in strings)
我们正在检查我们的数组中是否存在从位置2开始且字符长度为5的预期substr
ing,如果存在,则该行将转到 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] 删除。
我来说两句