首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过比较两个文件来实现Awk-For循环

通过比较两个文件来实现Awk-For循环
EN

Stack Overflow用户
提问于 2014-01-03 22:59:17
回答 2查看 952关注 0票数 0

我有两个大文件。

文件1如下所示:

代码语言:javascript
复制
10 2864001 2864012
10 5942987 5943316

文件2如下所示:

代码语言:javascript
复制
10 2864000 28
10 2864001 28
10 2864002 28
10 2864003 27
10 2864004 28
10 2864005 26
10 2864006 26
10 2864007 26
10 2864008 26
10 2864009 26
10 2864010 26
10 2864011 26
10 2864012 26

所以我想要创建一个for循环,

  1. 文件1的第一列必须匹配文件2的第一列和
  2. 通过将文件1的第二列与文件2的第二列和
  3. 文件2的第三列和文件1的第三列与文件2的第二列相匹配。

因此,上述示例的输出应为文件1第一行文件2第三列的和,即347。我试着使用NR和FNR,但到目前为止我还没有做到。你能帮我生成awk脚本吗?

非常感谢

EN

回答 2

Stack Overflow用户

发布于 2014-01-03 23:46:27

转录,所以可能有打字:

代码语言:javascript
复制
awk '
BEGIN { lastFNR=0; acount=0; FIRST="T"}

FNR < lastFNR {FIRST="F"; aindex=0; next}

FIRST=="T" {
      sta[acount] = $2
      fna[acount] = $3
      acount += 1
      lastFNR=FNR         
}

FIRST=="F" && $2 >= sta[index] && $2 <= fna[aindex] {
      sum[aindex] += $3
      lastFNR = FNR
}

FIRST=="F" && $2 > fna[aindex] {
      aindex ==1
      if (aindex > acount) { FIRST="E" }
}

END {
      for(aindex=0; aindex<acount; +=aindex) {
            print sta[aindex], "through", fna[index], "totals", sum[aindex]
      }
}
' file 1 file2
票数 0
EN

Stack Overflow用户

发布于 2014-01-04 12:43:48

你可以试试

代码语言:javascript
复制
awk -f s.awk file1 file2

s.awk在哪里

代码语言:javascript
复制
NR==FNR {
    a[$1,$2]=$3
    next
}
($1,$2) in a {
    do {
        s+=$3
        if ((getline)+0 < 1) break
    } while ($2 != a[$1,$2])
    print s
}
{ s=0 }

产出:

代码语言:javascript
复制
319
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20914260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档