簡體   English   中英

awk比較2個文件,根據開始范圍和結束范圍打印匹配和差異:

[英]awk Compare 2 files, print match and difference based on Start Range And End Range:

我需要comapre兩個文件f1.txtf2.txt並獲得比賽和非比賽中,這種情況下,我希望檢查的第二場f2.txt躺在StartRange和EndRange之間f1.txt ,如果是,則首先打印的第二個字段f2.txt ,然后打印的整個線f1.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

這可能對您有用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM