If statement 如果(索引(i,$12)==1表示什么

If statement 如果(索引(i,$12)==1表示什么,if-statement,indexing,awk,If Statement,Indexing,Awk,JU遇到了一个awk脚本 awk 'BEGIN {OFS=FS} NR==FNR {a[$1]=($2" "$3);next} {for (i in a) if(index(i,$12)==1) print $0,a[$12]}' 在这个脚本中,什么是 如果(指数(i,$12)=1 平均值?是否仅在数字等于1的情况下指示真/假条件?没有示例,很难理解问题的完整要求。请通过查看代码来尝试 BEGIN:在读取输入文件之前执行节 OFS=FS这对我来说没有意义,因为默认情况下两个变量的值都是空格

JU遇到了一个awk脚本

  awk 'BEGIN {OFS=FS} NR==FNR {a[$1]=($2" "$3);next} {for (i in a) if(index(i,$12)==1) print $0,a[$12]}'
在这个脚本中,什么是 如果(指数(i,$12)=1
平均值?是否仅在数字等于1的情况下指示真/假条件?

没有示例,很难理解问题的完整要求。请通过查看代码来尝试

BEGIN
:在读取输入文件之前执行节

OFS=FS
这对我来说没有意义,因为默认情况下两个变量的值都是空格

NR==FNR
:这是读取第一个输入文件时的条件

a[$1]
:创建一个名为a的数组,其索引为当前行的$1,值为该行的第2列和第3列,其中包含空格

next
:next将从此处跳过1dt输入文件的所有进一步语句

for(a中的i)
:启动遍历数组a的所有元素的for循环

索引(i,$12)==1
:检查作为第一个输入文件的第一列的数组a的索引是否与第12列的起始点相同。虽然不能保证它将匹配精确的字。它看起来匹配并返回它的起始点,所以这里我们检查匹配字符串的起始值是否为1

如果上述条件为真,则打印索引为
$12

index()
的当前行和数组a是一个函数。它获取字符串在另一个字符串中的位置。从
man awk

索引(s,t)返回字符串s中字符串t的索引,如果t不存在,则返回0。(这意味着字符索引从 对t使用regexp常量是一个致命错误


在您的示例中,您迭代数组a的键,并检查列12是否以键开头。

当我们没有任何输入/输出文件时,这很难解释。但对于第一个文件,它将字段2和3存储在一个数组中,索引作为第一个字段。然后对于第二个文件,它在数组中循环,以查看是否找到匹配的字段。
 if(index(i,$12)==1)
这说明从数组中的数据来看,value
i
查找字符串是否以第二个文件的字段12中的
==1
文本开头。是您的朋友。@DavidC.Rankin在这种情况下,我认为它没有多大帮助。问题是看它如何处理多个文件、数组和来自不同字段的测试信息。:)我指的是
索引
参考,因为问题是
“如果(索引(I,$2)==1表示”
,那会怎么样,但我同意在大范围内,这可能不是他(或她)的问题。”需要解决。@Jotne我试图比较两个文件,但两个输入文件中都有重复项。因此,我试图学习如何添加for循环。我问了,但答案对复杂文件没有帮助。因为两个输入都有重复项,所以“for(I in a)if(I~$1)”没有帮助。所以,我试图学习如何做到这一点。我可以使用perl,但我正在寻找awk解决方案。