当bash中的另一个文本文件中也出现相同的数字时,更改文本文件中的字符串

当bash中的另一个文本文件中也出现相同的数字时,更改文本文件中的字符串,bash,Bash,我有两个文件,每行的名称几乎相同。这些数字定义了两个文本文件中每一行的唯一性。出现在file1.txt中的所有数字也出现在file2.txt中。但并非相反,这意味着file2.txt有更多的字符串。但是file2.txt包含正确的名称,有时可以是OUT\u P-[number]或OUT\u D-B-CP-[number]。因此,我想更改file1.txt中的字符串,因为它们出现在file2.txt中。 因此: 如果在file2.txt中出现完全相同的字符串,我想在file1.txt中保留行。但是

我有两个文件,每行的名称几乎相同。这些数字定义了两个文本文件中每一行的唯一性。出现在
file1.txt
中的所有数字也出现在
file2.txt
中。但并非相反,这意味着
file2.txt
有更多的字符串。但是
file2.txt
包含正确的名称,有时可以是
OUT\u P-[number]
OUT\u D-B-CP-[number]
。因此,我想更改
file1.txt
中的字符串,因为它们出现在
file2.txt
中。 因此: 如果在
file2.txt
中出现完全相同的字符串,我想在
file1.txt
中保留行。但是如果
file2.txt
中存在与
file1.txt
中的编号相同的
OUT\u P-[number]
,则将
file1.txt
中的字符串更改为
OUT\u P-[number]
。例如:
file1.txt
具有
OUT\u D-B-CP-0001
,但是
file2.txt
具有
OUT\u P-0001
,然后在
file1.txt
中也对其进行更改。并且数字只出现在
file2.txt
中的字符串应该被忽略,而不是添加到
file1.txt

file1.txt:

OUT_D-B-CP-0001
OUT_D-B-CP-0002
OUT_D-B-CP-0005
OUT_D-B-CP-0007
OUT_D-B-CP-0008
OUT_D-B-CP-0009
OUT_D-B-CP-0014
OUT_D-B-CP-0022
OUT_D-B-CP-0024
OUT_D-B-CP-0025
OUT_D-B-CP-0027
OUT_D-B-CP-0032
OUT_D-B-CP-0038
OUT_D-B-CP-0246
OUT_D-B-CP-0249
OUT_D-B-CP-0250
OUT_D-B-CP-0260
file2.txt:

OUT_P-0001
OUT_P-0002
OUT_P-0005
OUT_P-0007
OUT_P-0008
OUT_D-B-CP-0009
OUT_P-0014
OUT_P-0022
OUT_P-0024
OUT_P-0025
OUT_D-B-CP-0026
OUT_P-0027
OUT_D-B-CP-0028
OUT_P-0032
OUT_P-0033
OUT_P-0038
OUT_D-B-CP-0057
OUT_D-B-CP-0085
OUT_D-B-CP-0087
OUT_D-B-CP-0121
OUT_D-B-CP-0178
OUT_P-0246
OUT_P-0249
OUT_P-0250
OUT_D-B-CP-0260
输出:

OUT_P-0001
OUT_P-0002
OUT_P-0005
OUT_P-0007
OUT_P-0008
OUT_D-B-CP-0009
OUT_P-0014
OUT_P-0022
OUT_P-0024
OUT_P-0025
OUT_P-0027
OUT_P-0032
OUT_P-0038
OUT_P-0246
OUT_P-0249
OUT_P-0250
OUT_D-B-CP-0260
我试过这样做:awk-F-'NR==FNR{seen[$NF];next}($NF in seen)'file2.txt file1.txt>output.txt 我不知道如何在bash中制作,有人能帮我吗?

注意

不是一个纯粹的bash解决方案,但是。。。 这个一行命令应该可以做到这一点。在busybox awk上测试

$ awk 'BEGIN{n=0}{s=$0; sub(/^[^0-9]+/,"",s); sub(/[0-9]+$/,"",$0); id[s]=$0; if(n<s+0)n=s+0} END {for(i=1;i<=n;i++) {v=sprintf("%04d",i); if(id[v]!="") printf("%s%s\n",id[v],v) > "output.txt"}}' file1 file2
$awk'BEGIN{n=0}{s=$0;sub(/^[^0-9]+/,“”,s);sub(/[0-9]+$/,“”,0),$0);id[s]=$0;if(n)
$ awk 'BEGIN{n=0} NR==FNR {s=$0; sub(/^[^0-9]+/,"",s); sub(/[0-9]+$/,"",$0); id[s]=$0; if(n<s+0) n=s+0; next}{s=$0; sub(/^[^0-9]+/,"",s); sub(/[0-9]+$/,"",$0); if(id[s]!="") {id[s]=$0; if(n<s+0) n=s+0}} END {for(i=1;i<=n;++i) {v=sprintf("%04d",i); if(id[v]!="") printf("%s%s\n",id[v],v) > "output.txt"}}' file1 file2