[英]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.