下面有两个文件,File1是可变长度分隔的,但它们之间有一个空格。我想比较File1到File2的第3到第8位,在匹配字段后,File2的第2列将映射到File1的第21到第25位(前导零/秒)。如果没有匹配,请将其映射到第3到第8位(条带零)。
注意:保留格式。
File1中
40001234000 00000078901
40004567000 00000078901
40001537000 00000078901
文件2
1234 XXXX
1537 YYY
输出:
40001234000 0000000XXXX
40004567000 00000004567
40001537000 00000000YYY
我试过这个但它似乎没有用。
awk 'NR==FNR { map[$1] = $2; next } { key = substr($0,3,6); sub(/^0+/, "", key); emrfil = substr($0,21,5); emrfil = (key in map ? map[key] : key) OFS emrfil; print}' File2 File1
答案 0 :(得分:0)
这是一个快速解决方案。首先提供file2。
$ awk 'NR==FNR{a[$1]=$2;next}
{k=substr($1,5,4)}
k in a{$0=substr($0,0,length-5)
substr("00000",0,5-length(a[k]))a[k]}1' file2 file1
40001234000 0000000XXXX
40004567000 00000078901
40001537000 00000000YYY
请注意,即使第二行不匹配,也会修改第二行。也许使用printf有更好的方法0填充。
答案 1 :(得分:0)
awk 'NR==FNR{a[$1]=$2;next}{b=+substr($1,3,6);x=a[b]?a[b]:b;$2=gensub("0*(.{11}$)","\\1",1,"0000000000"x)}1' file2 file1
40001234000 0000000XXXX
40004567000 00000004567
40001537000 00000000YYY
使用gawk