我有一个示例文件,其内容如下所示。我想用不同文件中的值替换每行的值CP [0-9] *。原始文件在每行中的值之后也有一些空间,我也需要保留它们。
原始文件样本;
05CP14159170891652517
05CP14159170891652522
05CP14159170891652515
05CP14159212891662119
05CP14160021691687657
05CP14159064591626228
05CP14159064591626229
文件用于替换的文件:
DBB126EEEE
DBB131EEEE
DBB140EEEE
DBB145EEEE
DBB146EEEE
DBB147EEEE
DBB159EEEE
DBB171EEEE
我想用DBB126EEEE代替例如05CP14159170891652517和用DBB131EEEE代替05CP14159170891652522等等。
请建议我如何做到。
答案 0 :(得分:0)
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()
。
答案 1 :(得分:0)
我能够通过以下命令获得输出
awk 'FNR==NR { repl[FNR] = $0; next } { sub("05.*", "05" repl[++i]) } 1' replfile origfile
@Thor:在循环之间使用NF会有什么用?
我无法评论,因为我有50多个声誉。