2014-01-21 54 views
0

我需要comapre两个文件f1.txtf2.txt并获得比赛和非比赛,对于这种情况 我期待检查的第二场f2.txt位于StartRange和EndRange之间f1.txt,如果是,则先打印f2.txt, 的第二个字段,然后打印整行f1.txt。并且在f1.txt上找不到匹配,表示“未找到”,然后打印f2.txt整行。awk的基础上开始范围和结束范围比较2个文件,打印匹配和区别:

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 
+0

你还试过了什么?那是如何失败的? –

+0

抱歉不知道如何在Ranges – SVR

回答

0

这可能会为你工作:

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 
+0

上工作,谢谢,在运行这个sytax时,得到了下面的错误gawk:cmd。 line:8:F2 [c] = a [2]; F3 [c] = a [3]#存储行 gawk:cmd。行:8:^语法错误 range.sh:第10行:C++:命令未找到 range.sh:第11行:语法错误附近的意外令牌'}' range.sh:第11行:'}' – SVR

+0

谢谢很多Zsolt Botyki,它工作正常... – SVR