- 论坛徽章:
- 16
|
- cat awk.awk
- #!/usr/bin/awk -f
- # Recoder per line base on file2's id
- NR==FNR {
- file1num ++
- file1[FNR]=$0
- if ($1 ~ "value")
- next
- if (id1lines[$9]) {
- id1lines[$9]=id1lines[id]""FNR"-"
- } else {
- id1lines[$9]=FNR"-"
- }
- next
- }
- {
- file2[FNR]=$0
- file2num ++
- split($4,a,"_")
- id=a[2]"_"a[3]
- if (id2lines[id]) {
- id2lines[id]=id2lines[id]""FNR"-"
- } else {
- id2lines[id]=FNR"-"
- }
- }
- END {
- addyesnotofile1(file1,file2)
- addyesnotofile2(file1,file2)
- }
- function addyesnotofile1(file1,file2) {
- len = file1num
- for (i=1; i <= len; i++) {
- if (file1[i] ~ "value") {
- print file1[i] >> "file1.tmp"
- continue
- }
- # found all lines in file2 base on keyid
- split(file1[i],a)
- keyid = a[9]
- repos = a[14]
- # check if keyid exist in file2
- if (! id2lines[keyid]) {
- print file1[i]," NO" >> "file1.tmp"
- continue
- }
- found=0
- # check if range fit
- split(id2lines[keyid],a,"-")
- for (j in a) {
- split(file2[j],b)
- min = b[2]
- max = b[3]
- if ((min <= repos) && (repos <= max)) {
- print file1[i]," YES" >> "file1.tmp"
- found = 1
- break
- }
- }
- if (found) {
- continue
- }
- # not fit ranges
- print file1[i]," NO" >> "file1.tmp"
- }
-
- }
- function addyesnotofile2(file1,file2) {
- len = file2num
- for (i=1;i<=len;i++) {
- # give file2 keyid
- split(file2[i""],a)
- min = a[2]
- max = a[3]
- split(a[4],b,"_")
- keyid = b[2]"_"b[3]
- if (! id1lines[keyid]) {
- print file2[i]," NO" >> "file2.tmp"
- continue
- }
- found = 0
- # Travel all lines base on keyid
- split(id1lines[keyid],b,"-")
- for (j in b) {
- # give repos value
- split(file1[j],a)
- repos = a[14]
- if ((min <= repos) && (repos <= max)) {
- found = 1
- print file2[i]," YES" >> "file2.tmp"
- break
- }
- }
- if (found) {
- continue
- }
- # not fit ranges
- print file2[i]," NO" >> "file2.tmp"
- }
- }
复制代码 |
评分
-
查看全部评分
|