Chinaunix
标题:
两文件比较匹配替换问题 总感觉我把问题说不明白呢
[打印本页]
作者:
dahaoshanhe
时间:
2012-03-11 10:11
标题:
两文件比较匹配替换问题 总感觉我把问题说不明白呢
本帖最后由 dahaoshanhe 于 2012-03-11 10:13 编辑
源文件:有两个文件
file1
SP 2012 421 1 80 a 120 b 160 c
SP 2012 421 4 80 g 120 b 160 c 560 d 580 e 600
SP 2012 234 18 40 t 80 b 120 c 160 d
复制代码
file2
SP 2012 421 1 80 x 120 y
SP 2012 234 16 40 d 80 z 120 m
SP 2012 421 2 40 j 80 h 120 p 160 h 200 p
SP 2012 421 25 40 i 80
复制代码
文件描述:
两文件, 前四列为标识。从第5列开始,两列为一对。
比较两文件中的第3列,如果第3列相同,或是第3列之间差最小,两个最接近。就将文件2中对后面对应数字后的值与文件1中的进行置换。
目标文件:
SP 2012 421 1 80 x 120 y 160 c
SP 2012 421 4 80 h 120 p 160 h 560 d 580 e 600
SP 2012 234 18 40 d 80 z 120 m 160 d
复制代码
作者:
winway1988
时间:
2012-03-11 10:11
回复
1#
dahaoshanhe
[winway@winway test]$ cat awkscr
NR == FNR {
for (i=5; i<=NF; i+=2) {
line[FNR FS $3 FS $i] = $i FS $(i+1)
}
linecnt = FNR;
next;
}
NR > FNR {
for (i=1; i<=linecnt; i++) {
for (j in line) {
if (j ~ i FS $3) {
split(line[j], a, FS);
for (k=5; k<=NF; k+=2) {
if ($k == a[1]) {
$(k+1) = a[2];
break;
}
}
delete line[j];
find = 1;
}
}
if (find == 1) {
find = 0;
break;
}
}
print $0;
}
[winway@winway test]$ awk -f awkscr file2 file1
SP 2012 421 1 80 x 120 y 160 c
SP 2012 421 4 80 h 120 p 160 h 560 d 580 e 600
SP 2012 234 18 40 d 80 z 120 m 160 d
复制代码
作者:
zooyo
时间:
2012-03-11 11:22
提示:
作者被禁止或删除 内容自动屏蔽
作者:
yinyuemi
时间:
2012-03-11 13:44
回复
1#
dahaoshanhe
这个和前几个帖子的问题类似啊
作者:
dahaoshanhe
时间:
2012-03-11 15:28
回复
4#
yinyuemi
是啊 是差不多一样的问题
就是那个写的有点乱 ,我重新写个贴。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2