我有两个文件
文件1
307201 00608670 5.70283
300048 fff0002a8 5.57004
300001 00608690 5.56917
300001 00608678 5.56917
150032 fff0002c8 2.78517
150028 fff0002c0 2.78509
150027 fff0002b8 2.78508
150024 fff0002d0 2.78502
file2的
raw symbol [ 170]: GLO FUN : svma 0x00608690, sz 133 mem_mgr_init
rec(t) [ 170]: val 0x00608690, sz 133 mem_mgr_init
raw symbol [ 171]: GLO OBJ : svma 0x0000608670, sz 8 angleCounter
rec(d) [ 171]: val 0x0000608670, sz 8 angleCounter
raw symbol [ 172]: GLO FUN : svma 0x0000402e00, sz 16 th_signal_finished
rec(t) [ 172]: val 0x0000402e00, sz 16 th_signal_finished
raw symbol [ 173]: GLO FUN : svma 0x0000403da0, sz 133 xlate_nl_inplace
rec(t) [ 173]: val 0x0000403da0, sz 133 xlate_nl_inplace
raw symbol [ 174]: GLO FUN : svma 0x0000402eb0, sz 19 th_report_results
rec(t) [ 174]: val 0x0000402eb0, sz 19 th_report_results
raw symbol [ 175]: GLO FUN : svma 0x0000400c40, sz 97 GetTestData
rec(t) [ 175]: val 0x0000400c40, sz 97 GetTestData
raw symbol [ 176]: GLO FUN : svma 0x0000401d20, sz 144 al_exit
rec(t) [ 176]: val 0x0000401d20, sz 144 al_exit
raw symbol [ 177]: GLO FUN : svma 0x0000000000, sz 0 fgetc@@GLIBC_2.2.5
我需要搜索文件2中file1的第二列中的每个条目,并找到相关的符号名称(文件2的12美元)并将其添加为file1中的第四列。对于未找到的条目,我需要将其标记为NotFound。 期望的输出文件是这样的
307201 00608670 5.70283 angleCounter
300048 fff0002a8 5.57004 NotFound
300001 00608690 5.56917 mem_mgr_init
300001 00608678 5.56917 NotFound
150032 fff0002c8 2.78517 NotFound
150028 fff0002c0 2.78509 NotFound
150027 fff0002b8 2.78508 NotFound
150024 fff0002d0 2.78502 NotFound
我使用了下面的awk命令,但部分工作。它打印第二列中的每个条目及其与file2相关联的字符串。但是,它不是第二列中的字符串顺序,而是每个字符串出现在第二个文件中的顺序。
awk 'NR==FNR{a[$2];next} {for (i in a) if ($0 ~ i) {if ($12) print i"\t"$12;break;}}' file1 file2
有人可以帮助我吗?
答案 0 :(得分:0)
$ cat tst.awk
NR==FNR {
key = $(NF-3)
gsub(/^0x0*|,$/,"",key)
map[key] = $NF
next
}
{
key = $2
sub(/^0+/,"",key)
print $0, (key in map ? map[key] : "NotFound")
}
$ awk -f tst.awk file2 file1
307201 00608670 5.70283 angleCounter
300048 fff0002a8 5.57004 NotFound
300001 00608690 5.56917 mem_mgr_init
300001 00608678 5.56917 NotFound
150032 fff0002c8 2.78517 NotFound
150028 fff0002c0 2.78509 NotFound
150027 fff0002b8 2.78508 NotFound
150024 fff0002d0 2.78502 NotFound