Linux   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了regex – 从一个文件搜索模式到另一个文件大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我的file1包含四列数字,每行有16位数字: 5150782703810496 7071783126930570 9776701040412294 4414890272061604 6426318539518073 5261792065926013 6303463168130122 8332314317620078 7506133106243886 2242241367012197 827598
我的file1包含四列数字,每行有16位数字:

5150782703810496 7071783126930570 9776701040412294 4414890272061604
6426318539518073 5261792065926013 6303463168130122 8332314317620078
7506133106243886 2242241367012197 8275982207923757 7263931623813806
8882831187329643 3184441663826305 1416431572523093 0697142167966828

在file2中,我有16个搜索模式(在这里偶然排序),file1中的每个数字一个

0412294
062438
118732964
157252
17831269305
23813806
24224136701
3323143
381049
441489027206160
441663826305
5926013
66828
68130
82207923
8539518073

现在我正在寻找一种解决方案,从file1中的file2查找每个模式的行和列. file3中的所需结果:

1,1=381049
1,2=17831269305
1,3=0412294
1,4=441489027206160
2,1=8539518073
2,2=5926013
2,3=68130
2,4=3323143
3,1=062438
3,2=24224136701
3,3=82207923
3,4=23813806
4,1=118732964
4,2=441663826305
4,3=157252
4,4=66828

我用grep -f file2 file1尝试了它,发现了行但没有列.我在Windows上,更喜欢awk,grep或sed,不幸的是不能使用Perl和Bash.怎么做到这一点?谢谢!

解决方法

一个 awk解决方案.

script.awk的内容

FNR == NR {
    patterns[ $1 ] = 1 
    next
}

{
    for ( i = 1; i <= NF; i++ ) { 
        for ( p in patterns ) { 
            if ( index( $i,p ) > 0 ) { 
                printf "%d,%d=%s\n",FNR,i,p
                delete patterns[ p ] 
                break
            }   
        }   
    }   
}

运行它像:

awk -f script.awk file2 file1

产量:

1,4=66828

大佬总结

以上是大佬教程为你收集整理的regex – 从一个文件搜索模式到另一个文件全部内容,希望文章能够帮你解决regex – 从一个文件搜索模式到另一个文件所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: