我正在尝试使用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)
注意:
文件附件链接: 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)