相关疑难解决方法(0)

SED或AWK用另一个文件中的模式替换所有模式

我正在尝试使用SED脚本进行模式替换,但它无法正常工作

sample_content.txt

288Y2RZDBPX1000000001dhana
JP2F64EI1000000002d
EU9V3IXI1000000003dfg1000000001dfdfds
XATSSSSFOO4dhanaUXIBB7TF71000000004adf
10Q1W4ZEAV18LXNPSPGRTTIDHBN1000000005egw
Run Code Online (Sandbox Code Playgroud)

patterns.txt

1000000001 9000000003
1000000002 2000000001
1000000003 3000000001
1000000004 4000000001
1000000005 5000000001
Run Code Online (Sandbox Code Playgroud)

预期产出

288Y2RZDBPX9000000003dhana
JP2F64EI2000000001d
EU9V3IXI3000000001dfg9000000003dfdfds
XATSSSSFOO4dhanaUXIBB7TF74000000001adf
10Q1W4ZEAV18LXNPSPGRTTIDHBN5000000001egw
Run Code Online (Sandbox Code Playgroud)

我可以用单个SED替换像

sed  's/1000000001/1000000003/g' sample_content.txt
Run Code Online (Sandbox Code Playgroud)

注意:

  • 匹配模式不在固定位置.
  • 单行可能有多个匹配值要替换sample_content.txt
  • Sample_content.txt和patterns.txt有大于1百万条记录

文件附件链接: https ://drive.google.com/open?id = 1dVzivKMirEQU3yk9KfPM6iE7tTzVRdt_

谁能建议如何在不影响性能的情况下实现这一目标

更新于2018年2月11日

在分析了真实文件之后,我得到了一个提示,即在第30和第31位有一个等级值.这有助于我们在需要的地方和所有地方申请更换. 如果等级AB则在更换的10位数电话号码41-50和101-110 如果等级BC然后在更换的10位数电话号码,11-20,61-70和151-160 如果等级DE再更换10位数的电话号码在1-10,71-80,151-160和181-190



像这样,我看到了200个样本记录的50个独特等级.

{   grade=substr($0,110,2)} // identify grade
{ 
    if (grade == "AB") {
        print substr($0,41,10) ORS substr($0,101,10)
    } else if(RT …
Run Code Online (Sandbox Code Playgroud)

shell perl awk sed gawk

8
推荐指数
2
解决办法
1335
查看次数

标签 统计

awk ×1

gawk ×1

perl ×1

sed ×1

shell ×1