[英]awk Compare 2 files, print match and difference based on Start Range And End Range:
我需要comapre兩個文件f1.txt
和f2.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.