sed:将识别字符的文本文件中的部分行替换为另一个文件中的整行

时间:2017-04-21 04:26:02

标签: bash sed

我有很多相应的.txt文件。我想在第一个.txt文件(text1.txt)中识别特定字符":",然后用另一个.txt文件中的相应行替换它(以及text1.txt中的其余行)。 text2.txt)。我还想在复制的值之前添加一个额外的字符"*"

text1.txt看起来像这样:

*
10.04:60.429 
*
*
*
12.023:60.078
*
9.033:60.045 
*
9.023:60.062 
*
*

和text2.txt看起来像这样:

* 
11
* 
* 
* 
4
* 
10
* 
9
* 
* 

输出应如下所示:

*
10.04*11
*
*
*
12.023*4
*
9.033*10 
*
9.023*9
*
*

有关使用sed执行此操作的最佳方法的任何想法吗?

1 个答案:

答案 0 :(得分:0)

awk脚本应该

awk 'BEGIN{i=1;j=1}
     NR==FNR{text1[i++]=$0;next}
     /:/{gsub(/:[^:]*/,"*" text1[j],$0)}
     #Note :[^:] looks for the last occurence of : in text1 strings
     {j++}1' text2.txt text1.txt

<强>结果

*
10.04*11
*
*
*
12.023*4
*
9.033*10
*
9.023*9
*
*