2017-04-21 85 views
-1

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

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做这件事的最佳方法?

+0

你尝试过这么远吗? – sjsam

+0

sed -i和sed -e但我无法动态地从第二个文本文件中找到值,并且在不知道要替换的值的情况下替换部分行 – Kosagl

回答

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 
* 
* 
+0

有没有理由在此使用awk而不是sed? – Kosagl

+0

@Kosagl好的,你需要记住一个文件中的东西,并在另一个文件中使用它。与sed会很乏味 – sjsam

相关问题