加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

regex – 从一个文件搜索模式到另一个文件

发布时间:2020-12-13 23:56:22 所属栏目:Linux 来源:网络整理
导读:我的file1包含四列数字,每行有16位数字: 5150782703810496 7071783126930570 9776701040412294 44148902720616046426318539518073 5261792065926013 6303463168130122 83323143176200787506133106243886 2242241367012197 8275982207923757 726393162381380
我的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=%sn",FNR,i,p
                delete patterns[ p ] 
                break
            }   
        }   
    }   
}

运行它像:

awk -f script.awk file2 file1

产量:

1,4=66828

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读