繁体   English   中英

如何用其他文件的值替换特定模式?

[英]how to replace a particular pattern by the values of other file?

我有一个示例文件,其内容如下所示。我想用不同文件中的值替换每一行的值CP [0-9] *。 原始文件在每行中的值之后也有一些空间,我也需要保留它们。

原始文件样本;

05CP14159170891652517

05CP14159170891652522

05CP14159170891652515

05CP14159212891662119

05CP14160021691687657

05CP14159064591626228

05CP14159064591626229

归档用于替换的文件:

DBB126EEEE
DBB131EEEE
DBB140EEEE
DBB145EEEE
DBB146EEEE
DBB147EEEE
DBB159EEEE
DBB171EEEE

我想用DBB126EEEE代替例如05CP14159170891652517和用DBB131EEEE代替05CP14159170891652522等。

请建议我该怎么做。

IIUC没有简单的方法可以使用sed来执行此操作,而awk可以很简单地做到这一点:

awk 'FNR==NR { repl[FNR] = $0; next } NF { sub("05.*", "05" repl[++i]) } 1' replfile origfile

输出:

05DBB126EEEE

05DBB131EEEE

05DBB140EEEE

05DBB145EEEE

05DBB146EEEE

05DBB147EEEE

05DBB159EEEE

该脚本将替换字符串加载到repl数组中,然后使用该数组通过sub()进行替换。

我能够使用以下命令获取输出

awk 'FNR==NR { repl[FNR] = $0; next } { sub("05.*", "05" repl[++i]) } 1' replfile origfile

@Thor:循环之间使用NF有什么用?

我无法发表评论,因为我的声誉超过50。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM