【问题标题】:awk Compare 2 files, print match and difference based on Start Range And End Range:awk 比较 2 个文件,根据 Start Range 和 End Range 打印匹配和差异:
【发布时间】:2014-02-10 15:41:40
【问题描述】:

对于这种情况,我需要比较两个文件 f1.txtf2.txt 并获取匹配项和不匹配项 我正在检查f2.txt 的第二个字段是否位于f1.txt 的 StartRange 和 EndRange 之间,如果是,则首先打印f2.txt 的第二个字段, 然后打印整行f1.txt。如果在f1.txt 上找不到匹配项,请声明“未找到”,然后打印f2.txt 整行。

f1.txt

Flag,StartRange,EndRange,Month
aa,1000,2000,cc,Jan-13
bb,2500,3000,cc,Feb-13
dd,5000,9000,cc,Mar-13

f2.txt

ss,1500
xx,500
gg,2800
yy,15000

期望的输出

ss,1500,aa,1000,2000,cc,Jan-13
xx,500,Not Found,Not Found,Not Found,Not Found
gg,2800,bb,2500,3000,cc,Feb-13
yy,15000,Not Found,Not Found,Not Found,Not Found

【问题讨论】:

  • 你尝试过什么?那是怎么失败的?
  • 抱歉不知道如何处理 Ranges

标签: unix awk


【解决方案1】:

这可能对你有用:

gawk 'BEGIN { 
        FS="," # Field separator
        c=1    # counter
        while ((getline line < ARGV[1]) > 0) { 
            if (line !~ "Flag,StartRange,EndRange,Month") { # No need for header
                F[c]=line;                   # store line
                split(line,a,",")            # split line
                F2[c]=a[2] ; F3[c]=a[3]      # store the lines' range parts
                c++
            }
        }
      } 
FILENAME==ARGV[2] { 
    # Work on second file
    for (i in F) { # For every line scan the first file 
        # if within a range, step out
        if ($2>=F2[i] && $2<=F3[i]) {found=i ; break} 
        # else check next
        else {found=0}
    }  
    # if the above found anything print the line from second file
    # with the relavant line from the first
    if (found>0) { 
        print $0 "," F[found] 
    } 
    # otherwise the not found message
    else { 
        print $0 ",Not Found,Not Found,Not Found,Not Found" 
    } 
}' f1.txt f2.txt

【讨论】:

  • 谢谢,在运行这个 sytax 时,得到以下错误 gawk: cmd.行:8:F2[c]=a[2]; F3[c]=a[3] # 存储行 gawk: cmd.第 8 行:^ 语法错误 range.sh:第 10 行:c++:找不到命令 range.sh:第 11 行:意外标记附近的语法错误}' range.sh: line 11: }'
猜你喜欢
  • 2012-10-18
  • 1970-01-01
  • 1970-01-01
  • 2019-06-24
  • 2021-06-15
  • 2019-11-11
  • 1970-01-01
  • 2012-10-18
  • 1970-01-01
相关资源
最近更新 更多